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