从 CSV 文件中过滤已启用的 AD 用户

Filter enabled AD users from CSV file

我有一个导入用户列表的脚本,想检查是否有任何这些用户被禁用。我确实尝试 运行 下面的脚本,但它不会过滤 CSV 文件中的用户,它会过滤整个组织中的每个人。任何建议,将不胜感激。如果需要使用 header.

,则在 CSV 文件的 header 之一中显示名称和 SIP 地址
Import-CSV -Path .\Piscataway-+1732.csv  | ForEach-Object {
  Get-ADUser -Filter "Enabled -eq '$true'"  | select Enabled,EmailAddress,SamAccountName
} | Export-CSV .\results77.csv -NoTypeInformation

您有几个问题:

  1. 您正在从 Import-Csv 传送到 ForEach-Object。所以 Get-ADUser 并不知道你正在用管道输入对象。
  2. Get-ADUser-Identity 参数是值,而不是 属性 名称。因此您需要回显相应的列以将其发送到管道中。
  3. 如果您通过管道传输并使用 -Filter 参数,过滤器将应用于整个域。它不会将过滤器限制为您输入的内容。
  4. 如果您想输出电子邮件地址,您必须告诉 Get-ADUser 检索它。

尝试这样的事情:

Import-CSV -Path .\Piscataway-+1732.csv  | 
ForEach-Object{ $_.samAccountName }
Get-ADUser -Properties mail | 
Where-Object{ $_.Enabled }
Select-Object Enabled,mail,SamAccountName  | 
Export-CSV .\results77.csv -NoTypeInformation

Note: The Property for the email address is "mail".

Note: Since we don't have a sample of the CSV file the above example assumes there's a column names samAccountName.

现在,如果您希望输出来自 CSV 文件但根据用户在 AD 中的状态对其进行验证,我们必须更改方法。一如既往,有几种方法可以做到这一点。

示例 1:

Import-CSV -Path "c:\temp\test.csv"  | 
Select-Object @{Label = 'Enabled'; Expression = { ( Get-ADUser $_.samAccountName ).Enabled } },EmailAddress,samAccountName |
Export-CSV -Path "c:\temp\Output.csv" -NoTypeInformation

这再次采用列名称 (samAccountName)。它还假定还没有“已启用”列。因此,我们添加了一个名为 enabled 的 属性,我们通过 Get-ADUser 获取它。然后最终重新导出为 Csv。

示例 2:

$CsvData = Import-CSV -Path "c:\temp\test.csv"

$EnabledUsers = 
( 
    $CsvData | 
    ForEach-Object{ $_.samAccountName } |
    Get-ADUser |
    Where-Object{ $_.Enabled }
).samAccountName

$CsvData | 
Where-Object{ $EnabledUsers -contains $_.samAccountName } |
Select-Object @{Label = 'Enabled'; Expression = { $true } },EmailAddress,samAccountName |
Export-Csv -Path "c:\temp\Output.csv" -NoTypeInformation

示例 1 非常适合小型作业,但对 Get-ADUser 的多次单独调用对于大型运行来说可能会很慢。在此示例中,一次导入 CSV 数据。然后使用它来获取在 AD 中启用的那些条目的平面列表。完成后,您可以使用 -contains 运算符来检查该帐户是否已启用。再一次添加“已启用”属性.

这应该会给您一个大概的概念。可能有十几种方法可以做到这一点,但希望这能让您对必须发生的事情有一个很好的了解。让我知道这是否有帮助。