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 specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn