【问题标题】:How to control execution flow in Powershell based on StartWith() result?如何根据 StartWith() 结果控制 Powershell 中的执行流程?
【发布时间】:2023-03-15 18:06:01
【问题描述】:

试图让这个简单的语句起作用,但我不明白为什么它不会输出正确的结果。

$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 语句的结果一起工作?

【问题讨论】:

    标签: powershell if-statement wmi startswith


    【解决方案1】:

    您的命令用双引号括起来,因此您传递的是命令字符串,而不是实际返回的值。

    当你把它改成命令并返回值时,它是一个具有Name属性的对象,并且它不包含方法“StartsWith”,而是可以使用比较运算符,下面的I'已经使用了匹配以“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" 
        }
    

    【讨论】:

    • 我知道它会像这样简单,谢谢你——这已经奏效了。
    【解决方案2】:

    试试这个:

    $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来调用表达式,然后使用扩展属性值并在a上执行StartsWith字符串变量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-17
      • 1970-01-01
      • 1970-01-01
      • 2020-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-29
      相关资源
      最近更新 更多