PowerShell版本7中引入了哪些新的Null运算符?

2023-11-18 11:28:51

PowerShell版本7引入了一些新的空运算符。它们如下。

  • 空合并运算符-??

  • 空条件赋值运算符-?? =

  • 空条件成员访问运算符-?。和?[]

一种。空合并运算符-??

Null合并运算符将评估左侧条件或操作数,如果为null,则评估右侧操作数,否则将提供左侧操作数的值。

例如,如果没有Null-Coalescing运算符,我们将编写如下所示的脚本,

$Name = $null
if($Name -eq $null){"Name is Null"}
Else {"PowerShell"}

上面相同的条件可以写成?? 运算符。

$name = $null
$name ?? "PowerShell"

输出-

PowerShell

因此,变量输出的左侧为Null,因此将评估值或表达式的右侧。

假设左侧操作数不为null,则显示其值。

$name = "Hello"
$name ?? "PowerShell"
Hello

您还可以添加表达式

$service = Get-Service abc -ErrorAction Ignore
$service ?? (Get-Service Spooler)

输出-

Status Name DisplayName
------ ---- -----------
Running Spooler Print Spooler

b。空条件赋值运算符-?? =

Null条件赋值运算符?? =仅在左侧操作数值为null时,才将右侧操作数的值分配给左侧操作数。如果左侧操作数为Null,则此运算符不评估右侧操作数。例如,

$serivce = $null
$service ??= (Get-Service Winrm)

输出-

$service
Status Name DisplayName
------ ---- -----------
Running Winrm Windows Remote Management (WS-Managem…

上面的命令类似于,

$service = $null
if($service -eq $null){$service = Get-Service Winrm}
$service
Status Name DisplayName
------ ---- -----------
Running Winrm Windows Remote Management (WS-Managem…

如果左侧运算符不为null,则不会更改该值。

$val = "PowerShell"
$val ??= "Hello World"

输出-

$val
PowerShell

C。空条件成员访问运算符-?。和?[]

顾名思义,这两个运算符都用于访问对象的成员。这两个运算符都是在PS版本7中引入的,并且仍处于“预览”模式,并且用于实验目的,因此并非所有人都可以使用。

这类似于直接访问变量或对象的任何属性或成员,但是为什么我们需要它们呢?因为它首先评估对象,并且如果它为null,则它不访问成员(属性或方法)。

由于我们同时使用两个运算符来访问对象的属性或方法,因此需要将对象用{}括起来,然后才能使用该运算符。例如,

$service = Get-Service WinRm
${Service}?.Status

输出-

Running

上面的示例也可以通过简单地访问属性来实现,但是不同之处在于,如果服务名称不存在,那么简单的命令将引发错误,如果服务名称为null,则该运算符将不存在。例如,

$services = Get-Service ABC -ErrorAction ignore
$service.start()
You cannot call a method on a null-valued expression.
At line:1 char:1
+ $service.start()
+ ~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull

新的运算符不会提供任何输出,因为服务名称不存在。

${Service}?.Start()
  • 作者:
  • 原文链接:
    更新时间:2023-11-18 11:28:51