获取具有LDAFilter或匹配项的csv列表中每个用户的AdUser Lookup



我正在使用从不同列表派生的用户名列表向AD查询用户详细信息,这意味着并非所有用户名都与SamAccountName完全匹配,例如,可能会从末尾删除一个数字或字母。我可以进行精确的匹配查找,并输出它找不到的名称,但我想使用该列表名称,并通过LDAFilter或搜索运行它们,以检查模糊匹配。到目前为止,我有:

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:(

明确测试它是否真的返回了任何东西来使其工作:

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
}
}

相关内容

  • 没有找到相关文章

最新更新