Powershell 使用DisplayName查找广告用户信息
我有一个显示名列表,我需要得到他们的广告信息Powershell 使用DisplayName查找广告用户信息,powershell,active-directory,Powershell,Active Directory,我有一个显示名列表,我需要得到他们的广告信息 Get-Content "C:\displaynames.txt" | foreach { $givenname,$surname = $_ -split ' ' if (Get-ADUser -Filter "surname -eq '$surname' -and givenname -eq '$givenname'"){ G
Get-Content "C:\displaynames.txt" |
foreach {
$givenname,$surname = $_ -split ' '
if (Get-ADUser -Filter "surname -eq '$surname' -and givenname -eq '$givenname'"){
Get-ADUser -Filter { displayName -match $_} -Properties EmailAddress, Manager | Select Givenname, Surname, SamAccountName, EmailAddress, Manager}
else {Get-ADUser -Filter { displayName -like "AD Test"} -Properties EmailAddress, Manager | Select Givenname, Surname, SamAccountName, EmailAddress, Manager}
} | Export-Csv -Path C:\result.csv
这很好,但前提是用户没有中间名,例如John Moore
如果用户有一个中间名,它不会选择它。
如何更改脚本,使其能够接收中间名用户,例如John Roger Moore?这里的基本问题是如何解释中间名 PowerShell 5有一些AI支持的cmdlet 这里,我将引用文档中的一个示例 示例2:简化字符串的格式 第一个命令创建一个包含名字、中间名和姓氏的数组。请注意,最后一个条目没有中间名 第二个命令根据示例格式化名称。它将姓氏放在输出的第一位,然后是名字。删除所有中间名;正确处理没有中间名的条目
-Filter
。筛选器应该是字符串,而不是脚本块 使用
-Filter
还有一个优点,就是您可以抑制抛出的异常,因此我将在一个步骤中进行构建,以确认我们确实找到了具有该displayname的用户:
Get-Content "C:\displaynames.txt" | ForEach-Object {
$user = Get-ADUSer -Filter "DisplayName -eq '$_'" -Properties DisplayName, EmailAddress, Manager -ErrorAction SilentlyContinue
if ($user) {
# output the wanted properties as **object**
$user | Select-Object Givenname, Surname, SamAccountName, EmailAddress, Manager
}
else {
# nobody in this domain with a displayname like that..
Write-Warning "User '$_' could not be found.."
}
} | Export-Csv -Path 'C:\result.csv' -NoTypeInformation
请注意,
Manager
属性的形式为managersdiscriminatedname。如果您想获取经理的其他属性,如他/她的姓名,则必须使用get ADUser-Identity$user.manager
在那里获取想要的属性这取决于您如何配置用户名信息,如姓名等。。。(例如,如果您将约翰·罗杰设置为姓名,然后将摩尔设置为姓氏,那么您也可以将约翰·罗杰设置为姓名。)为什么不直接在displayName
上进行筛选:Get ADUser-filter“displayName-eq'$'”
?我发现这篇帖子可能会有所帮助:
Get-Content "C:\displaynames.txt" | ForEach-Object {
$user = Get-ADUSer -Filter "DisplayName -eq '$_'" -Properties DisplayName, EmailAddress, Manager -ErrorAction SilentlyContinue
if ($user) {
# output the wanted properties as **object**
$user | Select-Object Givenname, Surname, SamAccountName, EmailAddress, Manager
}
else {
# nobody in this domain with a displayname like that..
Write-Warning "User '$_' could not be found.."
}
} | Export-Csv -Path 'C:\result.csv' -NoTypeInformation