PowerShell におけるヌル変数

  1. PowerShell における Null 変数の紹介
  2. PowerShell における Null 変数の影響
  3. PowerShell での Null 値の確認
  4. 結論
PowerShell におけるヌル変数

PowerShell は、値が null の $Null オブジェクトを扱い、一部のコマンドは出力を生成する必要があります。エラーが発生した場合、値は null になり、スクリプト内でコマンドが値を生成するかどうかを確認するためのトラブルシューティングにも役立ちます。

この記事では、null 変数、PowerShell の異なる構文における null 変数の使用の影響、および null 値の確認方法について説明します。

PowerShell における Null 変数の紹介

NULL は未知または空の値と考えることができます。たとえば、変数は値またはオブジェクトが割り当てられるまで NULL です。

この変数は重要である可能性があります。なぜなら、一部のコマンドは値を必要とし、値が NULL の場合は失敗するからです。

$null 変数は、NULL を表すために使用される PowerShell の自動変数です。これを変数に割り当て、比較に使用し、コレクションの NULL のプレースホルダーとして使用できます。

PowerShell は $null を NULL 値のオブジェクトとして扱います。したがって、この変数は他の言語から来た場合には期待とは異なる可能性があります。

PowerShell における Null 変数の影響

$null 値の動作は、コード内の出現場所によって異なる場合があります。NULL 変数が PowerShell スクリプトの異なる側面にどのように影響を与えるかを見てみましょう。

文字列への影響

文字列内で $null を使用すると、それは空の文字列(または空白の値)になります。

$value = $null
Write-Output "The value is $value."

出力:

The value is .

スクリプトの明確さを維持するために、ログメッセージで使用する際には、特に変数の値が文字列の最後にある場合は、変数を角括弧([])で囲むことをお勧めします。

$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 コレクションにインデックスを付けると、 "Cannot index into a null array"というエラーが発生します。

$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

"You cannot call a method on a null valued expression"というフレーズに出くわすたびに、まず $null 値をチェックせずに変数でメソッドを呼び出している箇所をコード内で確認するようにという信号です。

PowerShell での Null 値の確認

PowerShell で Null 値を確認するための比較演算子 -eq および -ne の使用

PowerShell で $null 値を確認する場合、比較の左側に $null 変数を配置することがベストプラクティスとされています。この書き方のスタイルは、意図的であるだけでなく、PowerShell のベストプラクティスとしても受け入れられています。

ただし、$null を右側に置くと予期しない結果が得られる状況もあります。次のコードを見て、結果を予測してみましょう。

if ( $value -eq $null ) {
    'The array is $null'
}

if ( $value -ne $null ) {
    'The array is not $null'
}

$value を定義しない場合、最初のものは $true に評価され、メッセージは The array is $null になります。ここでの注意点は、両方の結果が $false になるような $value を作成することが可能であるということです。

出力:

The array is $null

この場合、$value 変数は $null を含む配列です。

-eq 演算子は、配列内のすべての値をチェックし、一致する $null を返します。これは $false に評価されます。同様に、-ne 演算子は $null 値と一致しないすべてのものを返し、結果は得られず、(これも $false に評価されます)。

したがって、どちらの条件も $true ではなく、一方は $true であると予想されるかもしれません。

PowerShell で Null 値を確認するための -not 演算子の使用

-not 演算子は、条件を否定する論理演算子です。変数に適用されると、変数が null ではないかどうかをチェックします。

$myVariable = $null

if (-not $myVariable) {
    Write-Host "The variable is null."
}

このコードスニペットでは、$myVariable という変数を null 値で初期化しています。-not 演算子は、if 文内で $myVariable が null ではないかを確認するために使用されます。

条件が真の場合、スクリプトは if 文内のコードブロックを実行します。

出力:

The variable is null.

出力で示されているように、スクリプトは $myVariable が null であることを認識し、"The variable is null"というメッセージを出力します。

PowerShell で Null 値を確認するための IsNullOrEmpty() メソッドの使用

IsNullOrEmpty() は、System.String クラスのメソッドであり、ネイティブの PowerShell メソッドではありません。異なるデータ型には、null または空の値を確認するための異なる方法があるかもしれません。

このコードでは、$myString という変数を作成し、null または空の文字列を表す値 $null を割り当てます。

続けて、[string]::IsNullOrEmpty($myString) メソッドを使用して、$myString が null または空であるかを確認します。このメソッドは.NET Framework の [string] クラスの一部で、文字列が null または空の文字列であるかを判断するために使用されます。

$myString が実際に null または空である場合、条件は真となり、スクリプトは"The string is null or empty."を出力します。

$myString = $null

if ([string]::IsNullOrEmpty($myString)) {
    Write-Host 'The string is null or empty.'
}

出力:

The string is null or empty.

$myString は値 $null が割り当てられているため、条件は真であり、メッセージが出力に表示されます。

PowerShell で Null 値を確認するための IsNullOrWhiteSpace() メソッドの使用

IsNullOrWhiteSpace() は、.NET Framework の System.String クラスで利用可能な便利なメソッドで、文字列変数に対して呼び出すことで PowerShell でも使用できます。

このメソッドは、文字列が null、空、または空白文字のみで構成されているかどうかをチェックします。空白やタブしか含まない場合にも、文字列変数が実質的に空であるかどうかを確認したいときに便利です。

以下のコードでは、$myString という変数を作成し、空白文字(スペース)のみを含む文字列を割り当てます。

次に、[string]::IsNullOrWhiteSpace($myString) メソッドを使用して、$myString が null であるか、空白のみを含むかを確認します。

$myString = $null

if ([string]::IsNullOrWhiteSpace($myString)) {
    Write-Host 'The string is null or contains only whitespace.'
}

出力:

The string is null or contains only whitespace.

条件が真であるため($myString は null である)、スクリプトは"The string is null or contains only whitespace."を出力します。

このメソッドは、スペースやタブのために「空白」に見える場合であっても、文字列が本当に空であることを確認したいときに役立ちます。

結論

PowerShell スクリプトにおいて、$null 変数がどのように機能するかを理解することは重要です。なぜなら、異なる状況でスクリプトの動作に影響を与えることがあるからです。信頼性の高いスクリプトを作成するためには、$null を左側に配置して null 値を正しく確認するようなベストプラクティスに従うことが良いアイデアです。

スクリプト作成が初めての方でも経験がある方でも、これらの詳細を知ることで PowerShell をより良く使用できるようになります。

チュートリアルを楽しんでいますか? <a href="https://www.youtube.com/@delftstack/?sub_confirmation=1" style="color: #a94442; font-weight: bold; text-decoration: underline;">DelftStackをチャンネル登録</a> して、高品質な動画ガイドをさらに制作するためのサポートをお願いします。 Subscribe
Marion Paul Kenneth Mendoza avatar Marion Paul Kenneth Mendoza avatar

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn

関連記事 - PowerShell Variable