当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] PowerShell - 检查变量是否为 Null 或为空

作者:精品下载站 日期:2024-12-14 06:32:27 浏览:16 分类:玩电脑

PowerShell - 检查变量是否为 Null 或为空


编写脚本时最常见的任务之一是检查 PowerShell 中的变量是否为 NULL 或空。空值或空值总是有点具有挑战性,因为到底什么是空值?

在 PowerShell 7 中,使用 Null 合并运算符检查值是否为 null 变得更加容易。该运算符消除了使用 if-else 语句来检查值是否为 Null 的需要。

在本文中,我将解释如何检查值是否为空、非空或空。我们将了解新的 Null 合并运算符,以及为什么在比较中从 $null 变量开始很重要。

什么是空值

当我们在编程或脚本语言中谈论 NULL 时,我们可以假设它是一个没有任何值的变量。然而,在 PowerShell 中,Null 可以是空值或未知值。

NULL 值在 PowerShell 中写为 $null,它是自动变量之一。它是一个值为 NULL 的对象。这允许您使用 $null 作为集合中的占位符或将其分配给变量。

演示这一点的一个好方法是创建一个集合并计算它的长度。正如您在下面的示例中看到的,$null 对象被计为集合中的对象之一:

$fruits = "Apple", $null, "Pear"
$fruits.count
3

NULL 与空

除了 $null 值之外,我们还可以在 PowerShell 中使用空值。两者之间的区别在于,空值是声明并分配实际空值的变量。

如果我们看下面的示例,那么第一个变量是 $null,即使我们没有为其分配 NULL 变量。其他变量不为 null,而是为空。

# Null variable
$variableIsNull

# Empty string variable
$emptyString = ""

# Empty array variable
$emptyArray = @()

在 PowerShell 中检查是否为 Null

在 PowerShell 中,有多种方法可以检查变量或结果是否为 Null。检查值是否为 NULL 的推荐方法是将 $null 与该值进行比较:

if ($null -eq $value) {
    Write-Host 'Variable is null';
}

需要注意的是,上面的方法有两次返回 true。正如您所期望的,当值为 NULL 时,而且当变量未定义时也是如此。

当你想检查一个值是否为 Not Null 时,你可以使用比较运算符 -ne 来代替:

if ($null -ne $value) {
    Write-Host 'Variable is not null';
}

检查值是否为 Null 的另一种常见方法是简单地使用 if 语句而不进行任何比较。这也有效,但它的作用不仅仅是检查值是否为空。下面的比较实际上会执行以下操作:

  • 不为空

  • 不是空的

  • 不为 0

  • 不是数组,

  • 长度不等于0

  • 不是 $false

if ($value) {
    Write-Host 'Variable is not null or empty';
}

左侧为空

当您使用 Visual Studio code 或其他 IDE 编写 PowerShell 脚本时,当您在比较中将 $null 变量放在右侧时,您会收到警告。这是有充分理由的。

在某些情况下,将它们放在右侧的 $null 可能会导致意外结果。以下面的数组为例。如果我们将 $null 放在左侧,它会检查 $null 是否不等于我们的 $array,事实并非如此,所以它返回 true。

# Array
$a = 1, 2, $null, 4, $null, 6

# Check if the Array is not empty (null)
$null -ne $a  # returns true

# Return everything from the array that is not Null
$a -ne $null

# Returns
1
2
4
6

但是,当您将 $null 放在右侧时,它将返回数组中的所有内容,但不等于 $null。

[玩转系统] PowerShell - 检查变量是否为 Null 或为空

空合并运算符

如果您使用的是 PowerShell 7(而且确实应该使用),那么您可以使用新的 null 条件运算符之一来快速检查变量或属性是否为 null。这样,您就不需要每次只想检查变量是否为 null 时都编写 If 语句。

如果左侧的值不为空,则 Null 合并运算符 ?? 返回该值。如果左侧的值为空,则返回右侧的结果。

$nullableVariable = $null

# If $nullableVariable equal NULL, return "Default Value"
$defaultValue = $nullableVariable ?? "Default Value"

# Result of $defaultValue
The value is: Default Value

我们还可以使用此方法检查函数的结果,如果结果为 null,则调用另一个函数或 cmdlet:

function Get-LastUsedDate {
    return $null
}

# Use null-coalescing operator to handle null return value
$result = (Get-LastUsedDate) ?? (Get-Date).ToShortDateString()

还可以将多个空合并运算符链接在一起以查找或返回第一个不为空的变量。

# Define a chain of variables where one may be null
$firstVariable = $null
$secondVariable = "Value 2"

# Use null-coalescing operator to choose the first non-null value
$chosenValue = $firstVariable ?? $secondVariable ?? "No value found"

# Output the chosen value
Write-Host "Chosen value: $chosenValue"

空合并赋值运算符

空合并赋值运算符 ??= 可以更轻松地检查运算符左侧的变量是否为空,并将右侧的值赋给它如果它为空。

在下面的示例中,我们检查变量 $existingValue 是否为 null。如果为 null,则我们将变量设置为默认值:

# Variable that may or may not have a value
$existingValue = "Existing Value"

# Assign a new value using the Null-coalescing assignment operator
$existingValue ??= "Default Value"

# Result of $existingValue
Existing Value

空条件运算符 ?.?[]

PowerShell 7.1 中新增了 Null 条件运算符 ?.?[]。这些运算符允许您安全地访问可能为 null 的对象的属性和元素。

如果您访问不带 null 条件运算符的属性或元素,通常不会收到错误。仅当您使用严格模式时,您才会收到错误。因此,在这些情况下,检查您是否没有尝试访问空值对象的成员非常重要。

# Empty object
$cities = $null

# Set strictmode for test
Set-StrictMode -Version 2

# Will throw an error
$cities.language

# No error with null-conditional operator
${cities}?.language

在 PowerShell 中检查是否为空

除了检查值是否为 Null 之外,另一种常见做法是检查值是否为空。您只能在 PowerShell 中检查字符串或数组是否为空。

要检查字符串是否为空,只需将其与 "" 进行比较

$string = ""

if ($string -eq "") {
    write-host "Empty string found"
}

如果要检查数组是否为空,最好的选择是检查数组的长度:

$array = @()

if ($array.Count -gt 0) {
    write-host "Array is not empty"
}

为空或为空

使用字符串时,您还可以使用静态字符串函数来检查该值是否为 null 或空。如果你想知道该值是否不为null或空,那么你只需要在它前面放置-not

$string = $null

if ([String]::IsNullOrEmpty($string)) {
    write-host "Empty string"
}

# Check if not empty or null
if (-not [String]::IsNullOrEmpty($string)) {
    write-host "Striong is Not empty"
}

检查函数中是否为 Null

当您在 PowerShell 中创建自己的函数时,可以使用验证器 ValidateNotNullOrEmpty 确保参数不为 null 或空。这样您就不必在函数中进行额外的检查。

function Test-Input {
    param(
        [Parameter(Mandatory)]
        [ValidateNotNullOrEmpty()]
        [string]$input
    )
    
    Write-Host "Input received: $input"
}

# Test the function
Test-Input -input "Hello"

包起来

检查 Null 值可以使您的脚本更加健壮,并减少脚本中的错误。请务必尝试新的 PowerShell 空合并运算符,因为它们使用起来非常方便。

另外,请确保始终将 $null 值保留在比较的左侧。

希望您喜欢这篇文章,如果您有任何疑问,请在下面发表评论!

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯