PowerShell Like 運算符等:提升您的腳本能力

就像其他编程语言一样,PowerShell也有各种比较运算符。然而,与其他语言不同,这些比较运算符可能看起来有些奇怪。与==不同,你需要使用eq。与<>不同,你需要使用ne。这可能对新手来说很困惑。让我们在本文中了解一下PowerShell的like运算符和其他比较运算符。

使用eqceq运算符测试相等性

在PowerShell中,要检查一个对象是否等于另一个对象,可以使用eq运算符。eq运算符可以比较许多类型的简单对象,例如字符串、布尔值、整数等等。当使用时,eq运算符将根据结果返回布尔值TrueFalse

-eq运算符需要两个值进行比较。假设你将一个字符串赋给一个名为$string的变量。你想将这个变量的值与字符串值"PowerShell"进行比较,以确保它们相等。

在下面的示例中,您可以看到我们将值PowerShell分配给变量$string。然后,使用eq运算符,示例将$string的值与字符串powershell进行比较。简单吧?但是等等,它们并不真的相同。

PS> $string = "PowerShell"
PS> $string -eq "powershell"
True

请注意,=是赋值运算符,而不是比较运算符。在PowerShell中,您不能使用=将一个值与另一个值进行比较。

使用ceq运算符测试大小写敏感性

在上面的示例中,注意eq返回一个布尔值True,即使字符串不是完全相同。这种行为是因为eq运算符是大小写不敏感的。要测试大小写敏感的相等性,请使用ceq运算符。ceq运算符与eq完全相同,唯一的区别是它区分大小写。

您可以在以下代码片段中看到使用ceq的示例。现在请注意PowerShell看到了区分大小写的差异。

PS> $string -ceq "PowerShell"
True 
PS> $string -ceq "powershell"
False

使用necne运算符测试不相等

正如eqceq测试相等性一样,PowerShell还有一对执行相反操作的运算符,称为necne。与它们的对应运算符一样,这两个运算符执行完全相同的操作,只是相反的。

PS> $string = "PowerShell"
PS> $string -ne "PowerShell"
False
PS> $string -cne "PowerShell"
False
PS> $string -cne "powershell"
True

测试集合中的项目

通常,eqceq運算符用於標量或單個值,如字符串、整數和布爾值。但是,這些運算符也可以在集合(如數組)中找到包含特定值的實例。

請注意下面的示例中,我們創建了一個包含12個整數的數組。也許您想找到該數組中等於9的所有實例。沒問題,使用eq運算符對數組進行比較,返回所有與比較整數相等的實例。

PS> $array =@(1,2,3,4,5,6,7,8,9,9,9,9)
PS> $array -eq 9
9
9
9
9
PS> ($array -eq 9).Count
4

測試集合是否包含值

既然您剛剛學會使用eq運算符在數組中查找實例,我們可以進一步介紹“包含”運算符。這些運算符包括containsnotcontainsinnotin。這些運算符返回一個布爾值TrueFalse,用於判斷集合是否包含某個實例。

請查看以下示例。在這個示例中,我們創建了一個包含九個整數的數組。如果您想要一個簡單的是/否答案,即該數組是否包含某個整數,您可以使用containsnotcontains

PS> $array = @(2,4,5,6,8,8,9,9,9)
PS> $array -contains 9
True
PS> $array -notcontains 9
False
PS> $array -contains 5

同樣,您還可以使用innotin運算符。這些運算符與containsnotcontains幾乎相同,只有一個例外:比較的值在左邊而不是右邊。

$array = @(2,4,5,6,8,8,9,9,9)
9 -in $array
True
9 -notin $array
False

使用gtge運算符進行“大於”測試

如果您需要测试一个数字(整数)是否大于另一个数字,或者可能大于或等于另一个数字,会发生什么?您可以使用gtge运算符。这些运算符用于比较整数。

与其他运算符一样,这些运算符根据一个整数是否大于另一个整数返回布尔值TrueFalse。这两个运算符都测试左侧整数是否大于或大于等于右侧整数。

在下面的示例中,您可以看到每个运算符的行为。

PS> 7 -gt 5
True
PS> 7 -gt 7
False
PS> 7 -ge 7
True

与允许您在集合中查找实例的eq运算符类似,gegt运算符也可以做同样的事情。PowerShell会遍历集合中的每个项,并将每个值与您提供的值进行比较。在下面的示例中,您可以看到一个很好的示例。

PS> $array =@(1,2,3,4,5,6,7,8,9,9,9,9)
PS> $array -gt 5
6
7
8
9
9
9
9
PS> $array -ge 5
5
6
7
8
9
9
9
9

使用ltle运算符进行“小于”测试

gtge运算符类似,ltle运算符执行相同的功能,但相反。ltle运算符比较两个值,测试左侧的整数是否小于或小于等于右侧的整数。

如下面的示例所示,与gtge相比,将每个值与集合中的每个值进行比较的相同功能完全相同。

PS> $array =@(1,2,3,4,5,6,7,8,9,10)
PS> $array -lt 5
1
2
3
4
PS> $array -le 5 
1
2
3
4
5

使用PowerShell Like运算符进行通配符匹配

到目前为止,您已经学会了如何进行1:1的匹配。到目前为止,所有使用的运算符都是将一个完整的值与另一个进行比较,但是PowerShell还有另一个技巧。您还可以根据通配符或星号来比较值。

假设您只知道字符串的一部分字符。您无法使用eq,因为eq要求您知道整个字符串。使用PowerShell的like运算符,您不需要知道整个字符串。要测试一个值是否类似于另一个值,您可以用通配符替换您不知道的部分。

与其他运算符一样,这个功能也可以应用于集合。

您可以在下面看到PowerShell的like运算符和它的区分大小写的兄弟clike的示例。

PS> $string = "PowerShell"
PS> $string -like "*Shell"
True
PS> $array = @("PowerShell","Microsoft")
PS> $array -like "*Shell"
PowerShell
PS> $array -clike "*Shell"
PowerShell

运算符-notlike如果找不到匹配项,则返回布尔值True,如果有匹配项,则返回False。如果针对一个集合使用,它将返回所有不与-notlike运算符右侧给定模式匹配的其他值。要将区分大小写的模式添加到模式中,请使用-cnotlike运算符。

$string = "PowerShell" 
$string -notlike "*Shell"
False
$array = @("PowerShell","Microsoft")
$array -notlike "*Shell"
Microsoft
$array -cnotlike "*shell"
PowerShell
Microsoft

基于正则表达式进行匹配

PowerShell 的類似運算子及其相關功能非常方便,但一旦需要更複雜的匹配,你可以深入研究正則表達式(regex)的深淵世界。使用matchnotmatch運算子,你可以使用正則表達式進行極其複雜的字串匹配。

與 PowerShell 的類似運算子類似,match及其相反的對應運算子notmatch比較兩個字串並返回布林值TrueFalse。同樣,像其他運算子一樣,這種行為也可以應用於集合,正如下面的示例所示。

PS> $string = "PowerShell"
PS> $string -match "ow"
True 

PS> $array = @("PowerShell","Microsoft")
PS> $array -match "ow"
PowerShell

PS> $string = "PowerShell"
PS> $string -cmatch "po"
False
PS> $string -cmatch "Po"
True

PS> $array = @("PowerShell","Microsoft")
PS> $array -cmatch "Po"
PowerShell

總結

在本文中,你學到了 PowerShell 的類似運算子和其他運算子,以及如何對單個值和集合使用每個運算子。你已經看到了根據運算子以及是否是純量或集合,輸出的不同之處。

此外,你還看到了具有區分大小寫的運算子,匹配運算子如何基於正則表達式或通配符進行匹配,以及包含運算子用於測試對象是否包含特定值或特定對象中是否存在某個值。

PowerShell Like

Source:
https://adamtheautomator.com/powershell-like/