0

我正在使用从不同列表派生的用户名列表查询 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
    }
}

目前我得到的输出只是说成功找到了用户名,但没有将任何内容写入输出文件。

4

2 回答 2

1

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
    }
}
于 2021-11-19T16:17:14.823 回答
1

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
    }
}
于 2021-11-19T15:55:19.580 回答