将 CSV 中的 AD 用户与特定 OU 进行比较

Compare AD users from CSV to a specific OU

我有一个来自我整个域的用户名的 CSV 列表,我正在尝试将该列表与特定 OU 进行比较,并将匹配项发送到另一个文件。我是 Powershell 的新手,所以经过大量研究并与其他脚本进行比较后,我想到了这个:

$users = Import-csv C:\Users\me\Desktop\'RSA.csv' 
$(ForEach ($user in $users) 
{
Get-AdUser -identity $user -SearchBase "ou=Sub,ou=Root,dc=My,dc=Domain,dc=Name" -Filter * 
}) |
Select-Object SamAccountName |
Export-CSV -Path C:\Users\me\Downloads\test\output.csv -NoTypeInformation 

当我 运行 时,我收到错误“Get-ADUser:无法验证参数 'Identity' 上的参数。参数上的身份 属性 是 null 或空的。”如果我 运行 没有 -identity $user 它只会提取所有内容。关于如何使这项工作有什么建议吗?

当您调用 Get-ADUser 而不是给它一个仅包含用户名的字符串时,您传递的是一个带有 属性 名为用户名的对象。您可以使用 Select-Object -ExpandProperty Username 或仅引用 属性.

Import-Csv 'C:\Users\me\Desktop\RSA.csv' | 
    Where-Object {(!([string]::IsNullorWhiteSpace($_.UserName)))} |
    ForEach-Object {
        Get-ADUser -Identity $_.UserName
    } |
    Select-Object SamAccountName |
    Export-CSV -Path C:\Users\me\Downloads\test\output.csv -NoTypeInformation 

注意:更改为 ForEach-Object 循环以提高可读性,因为它看起来像您在尝试主要使用管道的地方。还添加了一个测试以跳过空白行或 whitespace/empty 字符串的用户名。删除了 SearchBaseFilter,因为您是基于身份查找的,不能在命令中使用它们。因为没有允许您使用所有这些的参数集。 Get-Help Get-ADUser 显示可用的参数集。