Wal*_*r81 6 powershell filtering
我正在构建一个列出所有非活动计算机帐户的脚本.我想从结果中排除一些系统.
我有一个文本文件,其中包含要排除的所有系统(每行一个系统名称).所有项目都存储在属性名称为"name"的对象中.所以$排除将包含:
name
----
system1
system2
Run Code Online (Sandbox Code Playgroud)
要列出所有非活动系统,请使用Search-ADAccount cmdlet:
$InactiveComputers = Search-ADAccount -AccountInactive -TimeSpan 90 -ComputersOnly | Where {$_.Enabled -eq $true}
Run Code Online (Sandbox Code Playgroud)
当然,我可以逐个循环所有结果,但是有一种简单的方法可以直接从结果中排除系统吗?我觉得有可能使用select-object或where-object,但我无法弄清楚如何与对象中的结果进行比较.
Rob*_*han 16
你在标题中使用它基本上是正确的:"{{.Name not in $ object}"
语法有点不同.将它管道到以下
Where { !($_.Name -in $excluded) }
Run Code Online (Sandbox Code Playgroud)
要么
Where { $_.Name -notin $excluded }
Run Code Online (Sandbox Code Playgroud)
两者似乎都在控制台中给出了相同的结果.快乐的编码!
注意:在PSv2和v3上测试过.
我在寻找答案的过程中遇到了这个问题,并且认为我会为其他遇到此问题的人更新这些选项.
导入排除文件(作为 csv)并使用 -notcontains 运算符:
$names = Import-csv exclude.txt | Foreach-Object {$_.Name}
$InactiveComputers = Search-ADAccount -AccountInactive -TimeSpan 90 -ComputersOnly | Where {$_.Enabled -eq $true -and $names -notcontains $_.Name}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
22868 次 |
| 最近记录: |