上面提到的所有上述3个运算符(Match, Like, Contains)都是PowerShell中的比较运算符。Match和Like运算符几乎相似,唯一的区别是通配符和Contains运算符完全不同。我们将看到示例并了解它们如何工作。
PS C:\WINDOWS\system32> "This is a PowerShell String" -Match "PowerShell" True PS C:\WINDOWS\system32> "This is a PowerShell String" -Like "PowerShell" False PS C:\WINDOWS\system32> "This is a PowerShell String" -Contains "PowerShell" False
如果您看到上面示例的输出,则仅对于Match语句,结果为True,原因是当您匹配字符串中的关键字时,它将检查关键字是否存在。不管您使用的关键字是单个关键字还是关联词。以下语句也是正确的。
PS C:\WINDOWS\system32> "This is a PowerShell String" -Match "Shell" True
但是通配符(*)对Match运算符没有帮助。
PS C:\WINDOWS\system32> "This is a PowerShell String" -Match "*PowerShell*" parsing "*PowerShell*" - Quantifier {x,y} following nothing. At line:1 char:1 + "This is a PowerShell String" -Match "*PowerShell*" + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : OperationStopped: (:) [], ArgumentException + FullyQualifiedErrorId : System.ArgumentException
因此,Match条件不会评估正则表达式运算符。相反,Like运算符与通配符(*)一起使用。
PS C:\WINDOWS\system32> "This is a PowerShell String" -like "*PowerShell*" True
因此,通配符在Match和Like运算符之间起主要作用。我们可以使用Contains运算符检查通配符(*)的使用。
PS C:\WINDOWS\system32> "This is a PowerShell String" -contains "*PowerShell*" False
Contains运算符也不能与通配符(*)一起使用。它是与Match和Like完全不同的运算符,并且可以处理对象的集合(Array)。
PS C:\WINDOWS\system32> "Apple","Dog","Carrot","Cat" -contains "dog" True