powerwshell IF vs Switch

时间:2016-12-09 16:37:25

标签: powershell

在检索计算机的操作系统时,根据我使用的是if语句还是切换,我会得到不同的结果:

if (((Get-WmiObject -ComputerName DT-04 Win32_OperatingSystem).Caption.ToString()) -match "Microsoft Windows 7 Professional") { "Found" } Else { "Not found" } 

结果=找到

switch ((Get-WmiObject -ComputerName DT-04 Win32_OperatingSystem).Caption.ToString()) { "Microsoft Windows 7 Professional" { "Found" } Default { "Not Found" } }

结果=未找到

为什么会这样?

1 个答案:

答案 0 :(得分:7)

ifswitch不同,这使得它与众不同;这是使用的运营商。在您使用if的{​​{1}}中,默认情况下-match使用的是switch

通过使用-eq,您正在进行正则表达式匹配,这将在源字符串中的任何位置找到该字符串。 -match不会。它们都应该不区分大小写。

您可以修改-eq以使用正则表达式或通配符匹配:

switch

或:

switch -regex ((Get-WmiObject -ComputerName DT-04 Win32_OperatingSystem).Caption.ToString()) 
{ 
    "Microsoft Windows 7 Professional" { "Found" } 
    Default { "Not Found" } 
}

或者,找出您的字符串不完全匹配的原因并更改您的字面值。你走哪条路取决于你的情况。

如果您不打算使用正则表达式,我会小心正则表达式匹配,因为很容易无意中使用特殊字符或使正则表达式无效。