PowerShellの型に注意
PowerShellで次のようなコードを実行すると、思うような挙動にならない。
Param( [string]$Flag)
$Flag = $Flag -eq "true"
if ($Flag) { Write-Host "true"}PS /test> ./test.ps1 -Flag falsetrue引数がfalse、trueに関わらず、いつでもtrueが出力される。これはPowerShellに型があることが原因。
Paramの設定で$Flagがstringであると宣言しているため、$Flag -eq "true" の結果が暗黙的にstringにキャストされてしまう。
そのため、別の変数で受けて利用するのが正しい。
Param( [string]$Flag)
$Flag2 = $Flag -eq "true"
Write-Host $Flag2Write-Host $Flag2.GetType().FullName
if ($Flag2) { Write-Host "true"}PS /test> ./test.ps1 -Flag falseFalseSystem.Boolean
PS /test> ./test.ps1 -Flag trueTrueSystem.Booleantrueそもそも$Flag = $Flag -eq "true" がイケてないが、PowerShellをシェルと考えているといろいろ問題が出るので気をつけないといけない。
スポンサーリンク
スポンサーリンク





