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 变量是 PowerShell 中的一个自动变量,用于表示 NULL。我们可以将其分配给变量,用于比较,并用作集合中 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 值

使用比较运算符 -eq-ne 来检查 PowerShell 中的 Null 值

在 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。这里的警告是,可以创建一个 $value,使得两个结果都是 $false

输出:

The array is $null

在这种情况下, $value 变量是一个包含 $null 的数组。

-eq 运算符检查数组中的每个值并返回匹配的 $null,这会评估为 $false。同样,-ne 运算符返回所有不匹配 $null 值的结果,导致没有结果(也评估为 $false)。

因此,尽管其中一个条件可能预期为 $true,但实际上两个条件都不是 $true

使用 -not 运算符检查 PowerShell 中的 Null 值

-not 运算符是 PowerShell 中的逻辑运算符,用于否定条件。当应用于变量时,它检查变量是否为 null。

$myVariable = $null

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

在这个代码片段中,我们有一个以 null 值初始化的变量 $myVariable-not 运算符在 if 语句中用于检查 $myVariable 是否不为 null。

如果条件为真,脚本将运行 if 语句中的代码块。

输出:

The variable is null.

如输出中所示,脚本识别出 $myVariable 是 null,并打印消息 "The variable is null"

使用 IsNullOrEmpty() 方法检查 PowerShell 中的 Null 值

IsNullOrEmpty()System.String 类的方法,而不是 PowerShell 的原生方法。不同的数据类型可能有不同的检查 null 或空值的方法。

在这个代码中,我们创建一个名为 $myString 的变量并将其赋值为 $null,表示一个 null 或空字符串。

我们使用 [string]::IsNullOrEmpty($myString) 方法检查 $myString 是否为 null 或空。这种方法是 .NET 框架中的 [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,条件为真,消息在输出中显示。

使用 IsNullOrWhiteSpace() 方法检查 PowerShell 中的 Null 值

IsNullOrWhiteSpace() 是 .NET 框架 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。

Enjoying our tutorials? Subscribe to DelftStack on YouTube to support us in creating more high-quality video guides. 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