powershell - 从 CSV 文件中过滤启用的 AD 用户
问题描述
我有一个脚本来导入用户列表,并想检查这些用户是否被禁用。我确实尝试运行下面的脚本,但它不会过滤 CSV 文件中的用户,它会过滤整个组织中的每个人。任何建议,将不胜感激。如果需要使用标头,则在 CSV 文件中的标头之一中显示名称和 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
注意:电子邮件地址的属性是“mail”。
注意:因为我们没有 CSV 文件的样本,所以上面的例子假设有一个列名为 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)。它还假设还没有“启用”列。因此,我们添加了一个通过 Get-ADUser 获得的名为 enabled 的属性。然后最后重新导出为 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
操作员检查帐户是否已启用。再次添加“启用”属性需要做一些额外的工作。
这应该给你一个大致的想法。可能还有十几种方法可以做到这一点,但希望这能让您对必须发生的事情有一个很好的了解。让我知道这是否有帮助。
推荐阅读
- c - 为什么我的写入没有阻塞到这个管道?
- docker - 在 Windows10 的浏览器中本地运行 Docker:错误 - 未找到 IP
- android - Android USB 附件到主机通信截断
- java - 优化循环中的顺序搜索
- c++ - 从 C++ 中的字符串输出元音和辅音
- sql - 按每月的第一天过滤
- xml - 仅当前面的兄弟节点的子节点不是某个节点时,XSL 模板才匹配
- javascript - CKEditor5 Balloon Build - 工具栏的剪贴板项目
- python-2.7 - list_jobs 函数 min_creation_time 错误
- javascript - 使用 Firebase Cloud Functions 发布带媒体的推文失败