从 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
您有几个问题:
- 您正在从
Import-Csv
传送到 ForEach-Object
。所以 Get-ADUser
并不知道你正在用管道输入对象。
Get-ADUser
的 -Identity
参数是值,而不是 属性 名称。因此您需要回显相应的列以将其发送到管道中。
- 如果您通过管道传输并使用
-Filter
参数,过滤器将应用于整个域。它不会将过滤器限制为您输入的内容。
- 如果您想输出电子邮件地址,您必须告诉
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
运算符来检查该帐户是否已启用。再一次添加“已启用”属性.
这应该会给您一个大概的概念。可能有十几种方法可以做到这一点,但希望这能让您对必须发生的事情有一个很好的了解。让我知道这是否有帮助。
我有一个导入用户列表的脚本,想检查是否有任何这些用户被禁用。我确实尝试 运行 下面的脚本,但它不会过滤 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
您有几个问题:
- 您正在从
Import-Csv
传送到ForEach-Object
。所以Get-ADUser
并不知道你正在用管道输入对象。 Get-ADUser
的-Identity
参数是值,而不是 属性 名称。因此您需要回显相应的列以将其发送到管道中。- 如果您通过管道传输并使用
-Filter
参数,过滤器将应用于整个域。它不会将过滤器限制为您输入的内容。 - 如果您想输出电子邮件地址,您必须告诉
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
运算符来检查该帐户是否已启用。再一次添加“已启用”属性.
这应该会给您一个大概的概念。可能有十几种方法可以做到这一点,但希望这能让您对必须发生的事情有一个很好的了解。让我知道这是否有帮助。