如何根据 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中你实际上并没有执行字符串,它仍然是一个字符串,你需要使用iexInvoke-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" 
    }