首页 > 解决方案 > 如何从 Powershell 中的 Get-ADuser cmdlet 输出中排除多个用户?

问题描述

我正在尝试为外部客人登记系统导出特定办公室中所有用户的列表。除了一些用户(大约 20 个左右)不被添加到公共目录之外,我需要将它们从输出中排除。

这是我到目前为止所拥有的...

    Get-ADUser -Filter {City -eq "Dallas"} -Properties GivenName, Surname, EmailAddress, Name |
        Select GivenName, Surname, EmailAddress, Name | 
        Sort-Object -Property GivenName | 
        Export-Csv $env:USERPROFILE\Desktop\ADusers.csv -NoTypeInformation -Force

例如,我希望避免长过滤线...

-filer {(name -ne "name 1")(name -ne "name 2")...} etc 

理想情况下,我想创建一个列出指定用户的变量。这样我以后可以轻松修改。

    $excluded = "Name 1","Name 2","Name 3","Name 4"

结果符合预期(需要排除的用户除外)...

任何帮助是极大的赞赏!

标签: powershellfilteractive-directory

解决方案


假设没有自定义属性或其他方式来识别这些用户/已经在 ActiveDirectory 中将它们分开,您可以做的一件事就是从您的名称数组构建过滤器字符串

$excluded = "Name 1","Name 2","Name 3","Name 4"
$namefilter = ($excluded | ForEach-Object{"name -ne '$_'"}) -join " -and " 
$cityfilter = "City -eq 'Dallas'"
Get-ADUser -Filter ($cityfilter, $namefilter -join " -and ") -Properties GivenName, Surname, EmailAddress, Name

所以过滤器实际上是这样的:

City -eq 'Dallas' -and name -ne 'Name 1' -and name -ne 'Name 2' -and name -ne 'Name 3' -and name -ne 'Name 4'

它可能看起来很复杂,但$cityfilter, $namefilter -join " -and "允许在不更改代码的情况下丢失其中一个过滤器。因此,如果$excluded最终为空,代码仍然会成功。你可以很容易地做到这一点,但这是我想减轻的。


推荐阅读