1

我正在尝试使用此脚本从显示名称列表中获取 AD 用户的登录名称列表。

Import-Csv 'C:\temp\displaynames.csv'
    ForEach-Object {
        $name = $_.displayname
        Get-ADUser -Filter * -Properties DisplayName | Where-Object {$_.displayname -eq $name}
    } |
    Select-Object SamAccountName, DisplayName |
    Export-Csv 'C:\Temp\Results.csv' -NoType

该脚本似乎运行没有错误,但我只得到显示名称的结果,其中没有空格。难道是我需要指定更多信息,例如域名?这可能归结为我的 displaynames.csv 列表的格式吗?

到目前为止,我已经尝试过:

  1. 每行包含名称的列表(没有双引号或引号)
  2. 每个名称都由“”封装(即“Joe Bloggs”)
  3. 每个名字都用“”封装(即“Joe Bloggs”)

所有的结果都是一样的。

4

2 回答 2

1

您可以执行以下 LDAPFilter 技巧来一次查询所有用户,这应该与查询多个 Active Directory 用户(使用 AD 模块;[adsi]应该更好)时一样有效,但它看起来并不漂亮。我还Trim为 CSV 的每个元素添加了一个,以删除可能导致问题的任何前导或尾随空格。

# Trim any trailing and leading spaces for each element
$users = (Import-Csv 'C:\temp\displaynames.csv').displayname.ForEach('Trim')

$filter = '(|(displayname={0}))' -f ($users -join ')(displayname=')
# - Something like:
#   $users = 'Joe Bloggs', 'John Doe', 'David Gilmour'
# - Becomes:
#   (|(displayname=Joe Bloggs)(displayname=John Doe)(displayname=David Gilmour))

Get-ADuser -LDAPFilter $filter -Properties DisplayName |
Select-Object samAccountName, DisplayName |
Export-Csv 'C:\Temp\Results.csv' -NoTypeInformation
于 2022-01-11T19:21:02.633 回答
0

我总是使用 Excel 来编辑和保存 CSV 文件,因为它总是会创建一个标准的有效 CSV 文件,并且它会处理所有的引用。CSV 应如下所示:

C:\temp\displaynames.csv

DisplayName
"Joe Bloggs"
"James Smith"

您现在拥有的脚本效率非常低。您循环访问的每个用户,您都会获得所有用户,然后使用Where-Object来查找您要查找的内容。Get-ADUser -Filter简单地使用命令为您完成所有工作要容易得多:

$CSV = Import-Csv 'C:\temp\displaynames.csv'
$CSV | ForEach-Object {
    $name = $_.displayname
    Get-ADUser -Filter {DisplayName -like $name} -Properties DisplayName
} | 
    Select-Object SamAccountName, DisplayName |
    Export-Csv 'C:\Temp\Results.csv' -NoType
于 2022-01-11T18:10:49.987 回答