我放在一起的脚本确实收集了我需要的结果,但我希望使用更干净的字符串。
收集了所有需要的信息后,我将结果导出为csv文件。有三个特定的行我想要删除,所以我重新导入csv文件并删除这些行。这是我当前正在使用的字符串:
#Remove Unneeded Users
import-csv .LDAPCrossWalkTable.csv | Where-Object "User ID" -ne 'test' | Where-Object "User ID" -ne 'process' | Where-Object "User ID" -ne 'app' | export-csv .LDAPCrossWalkTableFinal.csv -Force -NoTypeInformation
是否有一种方法可以通过使用-or操作符而不是管道3次单独使用一次Where-Object cmdlet ?我就是想不出正确的语法。任何输入,它非常感激!谢谢!
更新:谢谢你,奥拉夫,及时的回应和多种选择!我决定继续处理这个字符串:
import-csv .LDAPCrossWalkTable.csv | Where-Object {$_.'User ID' -notin 'test', 'process', 'app'} | export-csv .LDAPCrossWalkTableFinal.csv -Force -NoTypeInformation
是的,有一种方法可以在一个Where-Object
中组合多个过滤器。您可以在将结果导出到CSV文件之前应用此过滤器
Where-Object {
$_.'User ID' -ne 'test' -and
$_.'User ID' -ne 'process' -and
$_.'User ID' -ne 'app'
}
正如@Santiago square的评论所指出的……替代多个-ne
的方法是使用-notin
。
Where-Object {
$_.'User ID' -notin 'test', 'process', 'app'
}
…还是……如下所示:
Where-Object 'User ID' -notin 'test', 'process', 'app'
@Theo推荐的第三种方法是像这样使用正则表达式:
Where-Object 'User ID' -notmatch 'b(test|process|app)b'
或者像这样如果它应该是一个完全匹配
Where-Object 'User ID' -notmatch '^(test|process|app)$'
现在你有很多选择。: -)