学习使用 PowerShell 不等运算符及示例

除了作为命令行工具外,PowerShell是微软推出的一种编程语言,使您能够控制和自动化系统。PowerShell使用与大多数编程语言不同的运算符语法。

但是,一旦您了解了PowerShell运算符语法,您会发现使用起来并不困难。在PowerShell中,您将使用的最常见的运算符之一是不等运算符(-ne)。该运算符允许您测试两个值是否不相等。

在本文中,您将了解有关PowerShell不等运算符及其示例用法的信息。

先决条件

本教程将进行实际演示。如果您想跟着做,请确保您的系统已安装PowerShell。本教程使用Windows 10和PowerShell 7。

使用PowerShell不等运算符(基础知识)

简言之,PowerShell不等运算符(-ne)确定两个对象的值是否不相等,并根据结果返回布尔值。如果值不相等,则结果为True;否则,结果为False

但是,您何时以及如何使用PowerShell不等运算符呢?后续章节将教您PowerShell不等运算符的基础知识。

比较变量

PowerShell的”不等于”运算符最常见的用法之一是比较两个变量。例如,假设您有两个变量,$a和$b,并且您想要查看它们是否相等。比较语法如下:

$a -ne $b

如果$a和$b的值不相等,则此比较将返回True。否则,它将返回False。

1. 在您的PowerShell控制台中运行以下命令以创建您将用作示例的变量。$a,$b,$c和$d变量代表不同的值。您可以比较每个值以测试它们是否相等。

您将为$c和$d分配相同的值,以查看PowerShell”不等于”运算符如何处理相等值。

$a = 1
$b = 2
$c = 3
$d = 3

2. 现在,执行PowerShell的不等于比较,以查看$a和$b的值是否不相等。

$a -ne $b

结果返回True,因为$a的值为1,$b的值为2,它们不相等。

You will see a False output return, as shown in the image below, since the values of $c and $d are equal (3=3). variables with not equal values

3. 现在比较$c和$d变量,以查看它们是否也不相等。

$c -ne $d

您将看到一个False输出返回,如下图所示,因为$c和$d的值相等(3=3)。

Comparing variables with equal values

比较值

在使用PowerShell时,并非所有要比较的对象都在变量中。在这种情况下,您可以直接使用PowerShell的不等于运算符比较值。

例如,下面的命令直接使用PowerShell的不等于运算符比较两个值。

5 -ne 3

您将看到一个True值返回,如下所示,因为这些值不相等。

Comparing different values using the PowerShell not equal operator

另一方面,比较相等的值会返回False

5 -ne 5
Comparing equal values using the PowerShell not equal operator

从数组中删除一个值

PowerShell 不等于运算符返回一个布尔结果,指示两个值是否不相等。除了这个功能外,该运算符还可以过滤数组中的项。

例如,创建一个名为$numbers的变量,其中包含从1到5的数字数组。

# 创建包含1到5的数字的数组。
$numbers = 1..5
# 显示数组
$numbers
Storing an array

接下来,运行以下命令返回除一个数字(4)外的数组。

$numbers -ne 4

现在你可以看到,该命令返回了数组中除了数字4之外的每个数字。

Filtering an array

比较字符串

除了数字,你也可以对字符串应用 PowerShell 不等于比较。

1. 例如,假设你有两个字符串,“Hello”和“World”。要确定这两个字符串是否不相等,请运行下面的命令。

"Hello" -ne "World"

结果为True,因为“Hello”不等于“World”。

Comparing unequal stings

2. 现在比较字符串“Hello”和“hello”,看它们是否相等。

"Hello" -ne "hello"

然后你会看到结果为False,因为“Hello”等于“hello”。

Comparing two strings

3. PowerShell不等运算符不区分大小写。正如您在前一步中看到的,“Hello”等于“hello”。但是,如果在比较字符串值时需要区分大小写,可以用-cne运算符替代-ne运算符,它表示大小写敏感不等于

"Hello" -cne "hello"

因此,根据PowerShell,“Hello”和“hello”不再相等。

“Hello” and “hello”

在现实世界中使用PowerShell不等运算符(示例)

现在您了解了PowerShell不等运算符的基本概念,以下部分将让您体验一些其在现实世界中的用途。

监视服务状态

A staple of Windows systems administration is monitoring the server service status. This task involves filtering out which services whose Status Is Not Running.

例如,运行Get-Service cmdlet以显示本地计算机上的所有服务。

Get-Service

您可以在下面的输出中看到所有已停止和正在运行的服务。

Display all services

现在,为了筛选仅显示那些不Running的服务,请运行以下命令,并使用如下-ne运算符。

Get-Service | Where-Object {$_.Status -ne "Running"}

如您在下面所见,应用PowerShell不等比较后,状态列仅显示已停止的服务。

Filtering non-running services

同样,运行以下命令返回那些Status Is Not Stopped的服务。

Get-Service | Where-Object {$_.Status -ne "Stopped"}

这一次,您只会看到正在运行的服务。

Showing all running services

结合 PowerShell 的不等于与 AND 操作符

除了进行 1:1 比较外,您还可以将 PowerShell 的不等于条件与另一个比较操作符结合,比如 -eq(相等),使用 -and 操作符。当您比较的对象必须满足多个条件时,这种方法非常有用。

例如,监控服务器服务通常涉及确保所有自动服务都在运行。运行下面的命令以列出所有状态不是运行中且启动类型为自动的服务。在这个例子中,对象值必须符合所有条件。

Get-Service | 
Where-Object {$_.Status -ne "Running" -and $_.StartType -eq "Automatic"} |
Select-Object Status,StartType,Name

现在您可以看到未运行的自动服务,这可以帮助您决定必须采取的操作。

PowerShell Not Equal match all conditions

添加 If/Else 条件逻辑

您也可以在条件语句中使用 PowerShell 的不等于运算符,比如 if/else 语句。

例如,在大多数情况下,如果服务的启动类型值是自动的,则服务必须在运行。下面的脚本获取所有服务,检查哪些自动服务没有在运行,并执行纠正操作(显示消息并启动服务)。

注意:Start-Service $_.Name 行被注释掉,并且不会运行。如果您想执行该命令,请取消注释此行。

复制下面的代码并在 PowerShell 中运行它。

Get-Service -ErrorAction SilentlyContinue | ForEach-Object {
    if ($_.Status -ne 'Running' -and $_.StartType -eq 'Automatic') {
        "The service [$($_.Name)] StartType is [$($_.StartType)] but its current Status is [$($_.Status)]"
        # 启动服务 $_.Name
    }
}

结果显示哪些自动服务未运行。

Using PowerShell Not Equal in Conditional Logic

结论

在本文中,您学习了 PowerShell 不等运算符。您还学习了如何使用示例。到目前为止,您应该对其如何工作有了很好的理解。

有了这些新知识,您现在可以在 PowerShell 脚本中使用不等运算符来测试条件。但是,请记住还有其他比较运算符可用。您可能希望结合多个运算符来测试更复杂的条件。

Source:
https://adamtheautomator.com/powershell-not-equal/