Powershell:{_.Name不在$ object中}

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上测试过.

我在寻找答案的过程中遇到了这个问题,并且认为我会为其他遇到此问题的人更新这些选项.


Sha*_*evy 4

导入排除文件(作为 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)