PowerShell の Null 変数
PowerShell は $Null
オブジェクトを値 null で処理し、一部のコマンドは生成するためにいくつかの出力を必要とします。エラーが発生した場合は null に値を生成します。また、スクリプトのトラブルシューティングの目的で、コマンドが値を生成するかどうかを確認するのにも役立ちます。
この記事では、null 変数、PowerShell のさまざまな構文で null 変数を使用した場合の影響、および null 値を確認する方法について説明します。
PowerShell の Null 変数の概要
NULL は、不明な値または空の値と考えることができます。たとえば、値またはオブジェクトを割り当てるまで、変数は NULL です。
一部のコマンドは値を必要とし、値が NULL の場合はエラーを生成するため、この変数は重要になる可能性があります。
$null
変数は、NULL を表すために使用される PowerShell の自動変数です。これを変数に割り当て、比較に使用し、コレクション内の NULL のプレースホルダーとして使用できます。
PowerShell は、$null
を NULL 値を持つオブジェクトとして扱います。したがって、この変数は、別の言語から来た場合に期待できるものとは異なります。
PowerShell の Null 変数の影響
$null
値は、それらが表示される場所に応じて、コードに異なる影響を与えます。
文字列への影響
文字列で $null
を使用すると、空白の値(または空の文字列)になります。
$value = $null
Write-Output "The value is $value."
出力:
The value is .
この変数は、ログメッセージで変数を使用するときに変数を角かっこで囲む必要がある理由の 1つです。値が文字列の最後にある場合は、変数値のエッジを識別することがさらに重要です。
$value = $null
Write-Output "The value is [$value]"
出力:
The value is []
この変数により、空の文字列と $null
値を簡単に見つけることができます。
数式への影響
数値方程式で $null
変数が使用されている場合、エラーが発生しない限り、結果は無効になります。 $null
変数が 0
と評価される場合もあれば、結果全体が $null
になる場合もあります。
これは、値の順序に応じて 0
または $null
を与える乗算を含む例です。
$null * 5
$null -eq ( $null * 5 )
出力:
True
コレクションへの影響
コレクションを使用すると、インデックスを使用して値にアクセスできます。null コレクションにインデックスを付けようとすると、次のエラーが発生します:null 配列にインデックスを付けることができません
。
$value = $null
$value[10]
出力:
Cannot index into a null array.
At line:2 char:1
+ $value[10]
+ ~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : NullArray
コレクションがありますが、コレクションにない要素にアクセスしようとすると、$null
の結果が得られます。
$array = @( 'one', 'two', 'three' )
$null -eq $array[100]
出力:
True
オブジェクトへの影響
プロパティが指定されていないオブジェクトのプロパティまたはサブプロパティにアクセスしようとすると、未定義の変数の場合と同じように、$null
変数を取得できます。この場合、値が $null
であるか実際のオブジェクトであるかは関係ありません。
$null -eq $undefined.not.existing
出力:
True
メソッドへの影響
$null
変数でメソッドを呼び出すと、RuntimeException
例外がスローされます。
$value = $null
$value.toString()
出力:
You cannot call a method on a null valued expression.
At line:2 char:1
+ $value.toString()
+ ~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
null 値の式でメソッドを呼び出すことはできません
というフレーズが表示された場合は常に、最初に $null
値をチェックせずに、変数でメソッドを呼び出す場所を探すことができます。
PowerShell での Null 値の確認
例で $null
値をチェックするときは、常に $null
変数を左側に配置します。
このスタイルの記述は意図的なものであり、PowerShell のベストプラクティスとして受け入れられています。ただし、右側に配置しても期待どおりの結果が得られないシナリオがいくつかあります。
次の例を見て、結果がどうなるかを予測してみましょう。
if ( $value -eq $null ){
'The array is $null'
}
if ( $value -ne $null ){
'The array is not $null'
}
$value
を定義しない場合、最初のメッセージは $true
を評価し、メッセージは配列は$null
になります。ここでの注意点は、両方の結果が $false
になることを可能にする $value
を作成することが可能であるということです。
出力:
$value = @( $null )
この場合、$value
変数は $null
を含む配列です。
-eq
演算子は配列内のすべての値をチェックし、一致する $null
を返します(これは $false
と評価されます)。 -ne
演算子は、$null
値と一致しないものをすべて返します。この場合、結果はありません(これも $false
と評価されます)。
したがって、どちらかが $true
になるはずですが、どちらも $true
にはなりません。
Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn