1. ホーム
  2. scripting

[解決済み] コマンドプロンプトからPowerShellスクリプトにブーリアン値を渡す方法

2022-01-31 05:21:48

質問内容

バッチファイルからPowerShellスクリプトを呼び出す必要があります。スクリプトの引数の1つは、ブール値である。

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -NoProfile -File .\RunScript.ps1 -Turn 1 -Unify $false

以下のエラーでコマンドは失敗します。

Cannot process argument transformation on parameter 'Unify'. Cannot convert value "System.String" to type "System.Boolean", parameters of this type only accept booleans or numbers, use $true, $false, 1 or 0 instead.

At line:0 char:1
+  <<<< <br/>
+ CategoryInfo          : InvalidData: (:) [RunScript.ps1], ParentContainsErrorRecordException <br/>
+ FullyQualifiedErrorId : ParameterArgumentTransformationError,RunScript.ps1

今のところ、私はスクリプト内で文字列からブーリアンへの変換を使用しています。しかし、PowerShellにboolean引数を渡すにはどうしたらよいでしょうか?

どのように解決するのですか?

の場合、powershell.exe はスクリプトの引数を完全に評価しないようです。 -File パラメータが使用されています。特に $false 引数は、以下の例と同様に、文字列値として扱われます。

PS> function f( [bool]$b ) { $b }; f -b '$false'
f : Cannot process argument transformation on parameter 'b'. Cannot convert value 
"System.String" to type "System.Boolean", parameters of this type only accept 
booleans or numbers, use $true, $false, 1 or 0 instead.
At line:1 char:36
+ function f( [bool]$b ) { $b }; f -b <<<<  '$false'
    + CategoryInfo          : InvalidData: (:) [f], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : ParameterArgumentTransformationError,f

を使う代わりに -File を試してみてください。 -Command この場合、呼び出しはスクリプトとして評価されます。

CMD> powershell.exe -NoProfile -Command .\RunScript.ps1 -Turn 1 -Unify $false
Turn: 1
Unify: False

として デビッド また、switch 引数を使用すると、明示的に boolean 値を渡す必要がなくなるため、呼び出しが簡単になり、よりイディオム的になります。

CMD> powershell.exe -NoProfile -File .\RunScript.ps1 -Turn 1 -Unify
Turn: 1
Unify: True