Powershell foreach循环包含多个if语句

时间:2013-12-29 17:15:19

标签: powershell powershell-v3.0

我有一个脚本片段,基本上从命令中获取一些未格式化的xml类型输出。

然后在定义的过滤器部分中,我将其转换为xml并在每个节点上运行搜索循环,如下面的部分所示。

我想弄清楚的是我如何制作多个if -and循环,比如 if(($ CimProperty.VALUE -eq $ somevariable) - 和($ CimProperty.VALUE -eq $ something-else))

唯一的问题是,因为它是一个foreach循环所以它不会接受它,因为它一次需要每个属性,然后是'if语句 - 和部分',它不起作用,因为它是相同的xml类型属性部分。 换句话说,循环不会通过整个数组来识别if语句中的两个条件。

PS code snippet:

filter Import-CimXml
{
    $CimXml = [Xml]$_
    $CimObj = New-Object -TypeName System.Object
    foreach ($CimProperty in $CimXml.SelectNodes(“/INSTANCE/PROPERTY”))
    {
        if ($CimProperty.VALUE -eq $somevariable)
          {
             write-host "found it"
          }
    }
 }

我希望情景很清楚,提前感谢大家!

2 个答案:

答案 0 :(得分:1)

对于两个条件,你可以像(未经测试的)

那样直截了当地进行
filter Import-CimXml
{
    $foundfirst  = $false
    $foundsecond = $false
    $CimXml = [Xml]$_
    $CimObj = New-Object -TypeName System.Object
    foreach ($CimProperty in $CimXml.SelectNodes(“/INSTANCE/PROPERTY”))
    {
        if ($CimProperty.VALUE -eq $somevariable)
        {
            $foundfirst = $true
        }
        if ($CimProperty.VALUE -eq $someothervariable)
        {
            $foundsecond = $true
        }
    }
    if ($foundfirst -and $foundsecond)
    {
        write-host "found it"
    }
}

对于更多条件,您可能希望使用相应匹配词/布尔值的数组。

答案 1 :(得分:1)

只需扩展您的xpath查询即可完成所有操作。代码越少,效率越高。

filter Import-CimXml
{
    $CimXml = [Xml]$_
    $CimObj = New-Object -TypeName System.Object
    if($CimXml.SelectNodes(“/INSTANCE[PROPERTY='$somevariable' and PROPERTY='$someothervariable']”).Count -gt 0) { 
        write-host "found it" 
    }
 }