我的环境中有 Powershell 版本 3,4 和 5。当我编写下面的代码时,它不断给我错误,尽管 $CompatiableOS 包含 $OSverions 的输出。
[string] $CompatiableOS = '2016','2012','2008'
$OSVersion=[regex]::Matches(((Get-WmiObject -class Win32_OperatingSystem).caption), "([0-9]{4})")
if ( $CompatiableOS -contains $OSVersion)
{
return $TRUE
}
else
{
return $FALSE
}
Run Code Online (Sandbox Code Playgroud)
但是当我将上面的代码更改为下面时,它起作用了。可能是什么问题?
[string] $CompatiableOS = '2016','2012','2008'
$OSVersion=[regex]::Matches(((Get-WmiObject -class Win32_OperatingSystem).caption), "([0-9]{4})")
if ( $CompatiableOS.contains($OSVersion))
{
return $TRUE
}
else
{
return $FALSE
}
Run Code Online (Sandbox Code Playgroud)
js2*_*010 13
这出现了很多。-contains 与 .contains()。他们非常不同。-contains 必须完全匹配。但左侧可以是一个字符串数组。实际上,您使用 [string] 演员表将所有内容连接到左侧的一个字符串中。
$compatibleos
'2016 2012 2008'
'2016 2012 2008' -contains '2016'
False
'2016 2012 2008'.contains('2016')
True
'2016','2012','2008' -contains '2016'
True
('2016','2012','2008').contains('2016')
True
Run Code Online (Sandbox Code Playgroud)
小智 8
来自微软文档
-包含描述:收容操作员。判断参考值集合是否包含单个测试值。始终返回布尔值。仅当测试值与至少一个参考值完全匹配时才返回 TRUE。
这里重要的部分是“仅当测试值完全匹配时”。在您的情况下,您尝试将字符串“2016 2012 2008”与示例 2016 进行比较,这并不完全匹配。在这种情况下,您应该使用-like
运算符。或者您将兼容操作系统变量定义为类似的字符串数组[String[]]
,然后您可以使用 -contains
.
另外,检查 OSVersion 变量中的内容。它是一个machtcollection而不是一个字符串。如果您将兼容操作系统变量定义为字符串数组并且使用$OSVersion.Value
两个示例都将起作用。
归档时间: |
|
查看次数: |
25350 次 |
最近记录: |