在检索计算机的操作系统时,根据我使用的是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" } }
结果=未找到
为什么会这样?
答案 0 :(得分:7)
if
与switch
不同,这使得它与众不同;这是使用的运营商。在您使用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" }
}
或者,找出您的字符串不完全匹配的原因并更改您的字面值。你走哪条路取决于你的情况。
如果您不打算使用正则表达式,我会小心正则表达式匹配,因为很容易无意中使用特殊字符或使正则表达式无效。