我有一个脚本片段,基本上从命令中获取一些未格式化的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"
}
}
}
我希望情景很清楚,提前感谢大家!
答案 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"
}
}