我正在尝试确定如何从基于CSV文件的数组中排除值。 到目前为止,这是最好的select:
$arrIgnore = import-csv "ignore.csv" foreach($objIgnore in $arrIgnore){ $objAll = $objAll | where {$_.Name -ne $objIgnore.Name} }
这不会从数组中过滤出单个项目。 如果我用string中的值写出问题:
$objAll = $objAll | where {$_.Name -ne "value1"} $objAll = $objAll | where {$_.Name -ne "value2"}
它工作正常。 我确信我犯了一个愚蠢的错误,但我无法弄清楚。 🙂
$ objIgnore.Name是否存在? 检查$ objIgnore.Name的输出,并确保它包含你认为它的作用。 我认为$ objIgnore.Name可能是空的。 如果没有,你仍然可能需要将它从PSObject中转换为string。 这个输出是什么?
foreach($objIgnore in $arrIgnore){ $objIgnore.Name }
我能够得到以下代码工作,如你所愿。
$arrIgnore = import-csv ".\ignore.csv" $objAll = import-csv ".\all.csv" foreach($objIgnore in $arrIgnore){ $objAll = $objAll | where {$_.Name -ne $objIgnore.Name} }
其中ignore.csv包含
Name srv1 srv2 srv3 srv4 srv5
和all.csv包含
Name srv1 srv2 srv3 srv4 srv6 srv5 srv7 srv8 srv9 srv10
完成后,$ objAll返回
Name ---- srv6 srv7 srv8 srv9 srv10
仅供参考,更简单的方法是将-notcontains运算符与要忽略的string数组一起使用。
例如:
$array = @('value1','value2','value3','value4','value5') $array | Where-Object {@('value2','value3') -notcontains $_}
这将遍历包含所有对象的数组,而不是一次您要排除的每个值。