変数に変数が割り当てられているかどうかを確認し、そうでない場合はアクションを実行したいと思います。どうすればこれを達成できますか?
次のコードで試してみましたが、エラーが表示されます。「-is」の正しいオペランドは型である必要があります。
この時点では$ ProgramNameは割り当てられていません。
If ($ProgramName -isnot $null) {
$ProgramName = $ProgramName + ', ' + $cncPrograms
}
Else {
If ($cncPrograms -isnot $null) {
$ProgramName = $cncPrograms
}
}
割り当てられていない変数の値はnullであり、データ型はnullではありません。だから、これをやってください:
If ($ProgramName -ne $null)
... null以外の値に割り当てられている場合、TRUE
を返します。
さらに簡単なチェックは
IF($ProgramName)
これは$null
かどうかをチェックしますが、ロジックは逆なので、次のように使用できます
IF(!$ProgramName)
編集:
Ruffinはstrictmodeについてコメントで良い点を挙げています。この方法も機能します。
たとえば、明示的にグローバルスコープの場合、Test-Path variable:ProgramName
またはTest-Path variable:global:ProgramName
。これは、変数が存在するかどうかに応じて、$true
または$false
を返します。
Test-Path variable:\var
はあなたがやりたいことをすべきだと思います。
JNKとDavidからの(正しい)回答に基づいて、Jwerey Snoverからのこの素晴らしいブログ投稿をチェックして、PoweShellでのブール式のすべての使用例を紹介します。最後に、変数の存在をテストする方法を示します。
http://blogs.msdn.com/b/powershell/archive/2006/12/24/boolean-values-and-operators.aspx
上記の回答に反する
Test-Path variable:ProgramName
それは変数の存在をテストするだけなので、あなたが探しているものではないかもしれません。変数が$ nullに設定されている場合でも、$ trueを返します。
したがって、strictmodeでは、その存在の有無と空でないかどうかをテストする必要があります。
Set-StrictMode -version Latest
#TODO Add a scope parameter
Function IsEmpty([string]$varname){
if (Test-path "variable:$varname"){
$val=(gi "variable:$varname").value
if ($val -is [bool]) {$false}
else {$val -eq '' -or $val -eq $null} }
else{ $true }
}
#TEST:
if (test-path variable:foobar){remove-variable foobar} ; IsEmpty foobar
$foobar=$null; IsEmpty foobar
$foobar=''; IsEmpty foobar;
$foobar=$false; IsEmpty foobar
#Results:
True
True
True
False
厳密モードは、スクリプトの面白さの一部を取り除きます...