具有多个if语句的Powershell foreach循环

具有多个if语句的Powershell foreach循环,powershell,powershell-3.0,Powershell,Powershell 3.0,我有一个脚本片段,它基本上从命令中获取一些未匹配的xml类型输出 然后在定义的过滤器部分,我将其转换为xml,并在每个节点上运行一个搜索循环,如下部分所示 我想弄明白的是,我怎样才能创建一个多重if-and循环,比如 if($CimProperty.VALUE-eq$somevariable)和($CimProperty.VALUE-eq$someother)) 唯一的问题是,由于它是一个foreach循环,所以它不会接受它,因为它一次接受每个属性,然后接受它的“if语句和部分”,这不起作用,因

我有一个脚本片段,它基本上从命令中获取一些未匹配的xml类型输出

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

我想弄明白的是,我怎样才能创建一个多重if-and循环,比如 if($CimProperty.VALUE-eq$somevariable)和($CimProperty.VALUE-eq$someother))

唯一的问题是,由于它是一个foreach循环,所以它不会接受它,因为它一次接受每个属性,然后接受它的“if语句和部分”,这不起作用,因为它是相同的xml类型属性部分。 换句话说,循环不会遍历整个数组来从if语句中标识这两个条件

PS代码段:

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"
          }
    }
 }

我希望情况是清楚的,提前谢谢大家

仅在两种情况下,您可以使其相当直接,如(未经测试的)


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

只需扩展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" 
    }
 }

这非常有效,Joachim,我一直致力于找到一种不使用其他变量和方法的方法,但我只是遵循了你的解决方案,它是有效的。谢谢!
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" 
    }
 }