使用 LDAPFilter anr 匹配获取 csv 列表中每个用户的 AdUser 查找
Get-AdUser Lookup for each user in csv list with LDAPFilter anr match
我正在使用从不同列表派生的用户名列表查询 AD 以获取用户详细信息,这意味着并非所有用户名都与 SamAccountName 完全匹配,例如可能有一个数字或字母从末尾掉落。我可以让精确匹配查找工作并输出它找不到的名称,但我想通过 LDAPFilter anr 搜索获取该列表名称和 运行 它们以检查模糊匹配。到目前为止我有:
ForEach($User in $List){
Write-host "Now checking $User"
Try{
Get-ADUser -LDAPFilter "(anr=$User)" -Properties * |
select-object DisplayName,UserPrincipalName,mail,Enabled |
Export-CSV -Append $OutputFileResults -NoTypeInformation
Write-host "$User found successfully" -foregroundcolor Green
}
Catch{
$User | Export-CSV -Append $OutputFileFailed -NoTypeInformation
Write-host "$User not found" -foregroundcolor Red
}
}
目前我得到的输出只是说用户名已成功找到,但没有将任何内容写入输出文件。
Get-ADUser -LDAPFilter ...
在没有找到用户时不会抛出异常,所以说找到用户名这一事实并没有告诉您任何信息 - 它会告诉您它是找到 0 还是找到 100 :)
明确测试它是否确实 returns 使它工作的任何东西:
ForEach($User in $List){
Write-host "Now checking $User"
Try {
# search for matching users
$matchingUsers = Get-ADUser -LDAPFilter "(anr=$User)" -Properties * |
Select-object DisplayName,UserPrincipalName,mail,Enabled
if(-not $matchingUsers){
# no users found? throw to enter the catch block
throw
}
# otherwise proceed to export to CSV
$matching |Export-CSV -Append $OutputFileResults -NoTypeInformation
Write-host "$User found successfully" -foregroundcolor Green
}
Catch {
$User | Export-CSV -Append $OutputFileFailed -NoTypeInformation
Write-host "$User not found" -foregroundcolor Red
}
}
Try/Catch 不一定总是处理检查对象是否已返回的最佳方式。我个人会改用 if/else 语句。在 if
条件下,我们将 Get-ADUser 的结果分配给 $matchedUsers
,然后检查它是否为空。如果它不为空,那么我们继续进入 if
块。如果 $matchedUsers
为空,则 else
块为 运行.
ForEach ($User in $List) {
Write-Host "Now checking $User"
if ($matchedUsers = Get-ADUser -LDAPFilter "(anr=$User)" -Properties *) {
$matchedUsers | Select-Object DisplayName, UserPrincipalName, mail, Enabled |
Export-Csv -Append $OutputFileResults -NoTypeInformation
Write-Host "$User found successfully" -ForegroundColor Green
}
else {
$User | Export-Csv -Append $OutputFileFailed -NoTypeInformation
Write-Host "$User not found" -ForegroundColor Red
}
}
我正在使用从不同列表派生的用户名列表查询 AD 以获取用户详细信息,这意味着并非所有用户名都与 SamAccountName 完全匹配,例如可能有一个数字或字母从末尾掉落。我可以让精确匹配查找工作并输出它找不到的名称,但我想通过 LDAPFilter anr 搜索获取该列表名称和 运行 它们以检查模糊匹配。到目前为止我有:
ForEach($User in $List){
Write-host "Now checking $User"
Try{
Get-ADUser -LDAPFilter "(anr=$User)" -Properties * |
select-object DisplayName,UserPrincipalName,mail,Enabled |
Export-CSV -Append $OutputFileResults -NoTypeInformation
Write-host "$User found successfully" -foregroundcolor Green
}
Catch{
$User | Export-CSV -Append $OutputFileFailed -NoTypeInformation
Write-host "$User not found" -foregroundcolor Red
}
}
目前我得到的输出只是说用户名已成功找到,但没有将任何内容写入输出文件。
Get-ADUser -LDAPFilter ...
在没有找到用户时不会抛出异常,所以说找到用户名这一事实并没有告诉您任何信息 - 它会告诉您它是找到 0 还是找到 100 :)
明确测试它是否确实 returns 使它工作的任何东西:
ForEach($User in $List){
Write-host "Now checking $User"
Try {
# search for matching users
$matchingUsers = Get-ADUser -LDAPFilter "(anr=$User)" -Properties * |
Select-object DisplayName,UserPrincipalName,mail,Enabled
if(-not $matchingUsers){
# no users found? throw to enter the catch block
throw
}
# otherwise proceed to export to CSV
$matching |Export-CSV -Append $OutputFileResults -NoTypeInformation
Write-host "$User found successfully" -foregroundcolor Green
}
Catch {
$User | Export-CSV -Append $OutputFileFailed -NoTypeInformation
Write-host "$User not found" -foregroundcolor Red
}
}
Try/Catch 不一定总是处理检查对象是否已返回的最佳方式。我个人会改用 if/else 语句。在 if
条件下,我们将 Get-ADUser 的结果分配给 $matchedUsers
,然后检查它是否为空。如果它不为空,那么我们继续进入 if
块。如果 $matchedUsers
为空,则 else
块为 运行.
ForEach ($User in $List) {
Write-Host "Now checking $User"
if ($matchedUsers = Get-ADUser -LDAPFilter "(anr=$User)" -Properties *) {
$matchedUsers | Select-Object DisplayName, UserPrincipalName, mail, Enabled |
Export-Csv -Append $OutputFileResults -NoTypeInformation
Write-Host "$User found successfully" -ForegroundColor Green
}
else {
$User | Export-Csv -Append $OutputFileFailed -NoTypeInformation
Write-Host "$User not found" -ForegroundColor Red
}
}