PowerShell 中的空變數

Marion Paul Kenneth Mendoza 2023年1月30日
  1. PowerShell 中的 Null 變數簡介
  2. PowerShell 中 Null 變數的影響
  3. 在 PowerShell 中檢查空值
PowerShell 中的空變數

PowerShell 處理值為 null 的 $Null 物件,並且某些命令需要一些輸出才能生成。如果有任何錯誤,它們會生成 null 值,並且還有助於指令碼中的故障排除目的,以檢查命令是否生成任何值。

本文討論了 null 變數、在 PowerShell 中以不同語法使用 null 變數的影響以及檢查 null 值的方法。

PowerShell 中的 Null 變數簡介

我們可以將 NULL 視為未知或空值。例如,在你分配值或物件之前,變數為 NULL。

此變數可能很重要,因為某些命令需要一個值,如果該值為 NULL,則會生成錯誤。

$null 變數是 PowerShell 中用於表示 NULL 的自動變數。我們可以將它分配給變數,在比較中使用它,並將它用作集合中 NULL 的佔位符。

PowerShell 將 $null 視為具有 NULL 值的物件。因此,此變數與你來自其他語言時所期望的不同。

PowerShell 中 Null 變數的影響

$null 值會根據它們出現的位置不同地影響你的程式碼。

對字串的影響

如果你在字串中使用 $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

對集合的影響

集合允許我們使用索引來訪問值。如果我們嘗試索引一個空集合,我們會得到這個錯誤: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 值時,我們總是將 $null 變數放在左側。

這種寫作風格是有意為之,並被視為 PowerShell 最佳實踐。但是,在某些情況下,將其放在右側不會給你預期的結果。

讓我們看看下面的例子,並嘗試預測結果會是什麼:

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 是可能的。

輸出:

$value = @( $null )

在這種情況下,$value 變數是一個包含 $null 的陣列。

-eq 運算子將檢查陣列中的每個值並返回匹配的 $null(計算結果為 $false)。 -ne 運算子將返回與 $null 值不匹配的所有內容,在這種情況下,沒有結果(這也將評估為 $false)。

因此,即使其中一個應該是,也不會是 $true

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