如何根据 StartWith() 结果控制 Powershell 中的执行流程?
How to control execution flow in Powershell based on StartWith() result?
试图让这个简单的语句起作用,但我不明白为什么它不会输出正确的结果。
$asset = "get-wmiobject -class win32_computersystem | select Name"
if ($asset.StartsWith("ME")) {
echo "Asset tag is ok" }
Else
{ echo "Asset tag needs updating" }
出于某种原因,尽管 WMI 查询的结果是“ME12345”,但代码输出“资产标签需要更新”。
我是否需要使用 /F
或其他东西来使 IF
语句与 WMI 语句的结果一起工作?
试试这个:
$asset = iex 'get-wmiobject -class win32_computersystem | select -expand Name'
if ($asset.tostring().StartsWith("ME")) {
echo "Asset tag is ok" }
Else
{ echo "Asset tag needs updating" }
在$asset
中你实际上并没有执行字符串,它仍然是一个字符串,你需要使用iex
或Invoke-Expression
来调用表达式,然后使用扩展属性 值并在字符串变量上执行 StartsWith
。
您的命令包含在 double-quotes 中,因此您传递的是命令的字符串,而不是实际返回的值。
改成命令返回值时,是属性Name
的对象,不包含方法“StartsWith”,可以使用一个比较运算符,下面我使用了匹配以“ME”开头的行的正则表达式。
您可能想使用 CIMInstance
,因为它是 WMIObject
的新版本。
$asset = Get-CimInstance -Class win32_computersystem | Select Name
if ($asset.Name -match "^ME") {
Write-Output "Asset tag is ok"
}
Else {
Write-Output "Asset tag needs updating"
}
试图让这个简单的语句起作用,但我不明白为什么它不会输出正确的结果。
$asset = "get-wmiobject -class win32_computersystem | select Name"
if ($asset.StartsWith("ME")) {
echo "Asset tag is ok" }
Else
{ echo "Asset tag needs updating" }
出于某种原因,尽管 WMI 查询的结果是“ME12345”,但代码输出“资产标签需要更新”。
我是否需要使用 /F
或其他东西来使 IF
语句与 WMI 语句的结果一起工作?
试试这个:
$asset = iex 'get-wmiobject -class win32_computersystem | select -expand Name'
if ($asset.tostring().StartsWith("ME")) {
echo "Asset tag is ok" }
Else
{ echo "Asset tag needs updating" }
在$asset
中你实际上并没有执行字符串,它仍然是一个字符串,你需要使用iex
或Invoke-Expression
来调用表达式,然后使用扩展属性 值并在字符串变量上执行 StartsWith
。
您的命令包含在 double-quotes 中,因此您传递的是命令的字符串,而不是实际返回的值。
改成命令返回值时,是属性Name
的对象,不包含方法“StartsWith”,可以使用一个比较运算符,下面我使用了匹配以“ME”开头的行的正则表达式。
您可能想使用 CIMInstance
,因为它是 WMIObject
的新版本。
$asset = Get-CimInstance -Class win32_computersystem | Select Name
if ($asset.Name -match "^ME") {
Write-Output "Asset tag is ok"
}
Else {
Write-Output "Asset tag needs updating"
}