跨不同服务器的多个用户的 Get-ADUser

Get-ADUser for multiple users across different servers

好的,所以我有点困惑。我有一个我试图通过 AD 获取信息的用户列表,并且我找到了一个很好的小脚本来获取这些用户(如下所示)。我唯一的问题是用户可能来自两台潜在的服务器,而我只能从一台服务器上看到。

Get-Content \C:\Users.txt |
foreach-object{
Get-ADUser -filter {SamAccountName -eq $_} -Properties "Name,EmailAddress" |
Select-Object SamAccountName,Name,EmailAddress} |
Export-CSV 'C:\Email Addresses.csv' -NoTypeInformation

问题是我不确定用户可能在哪个服务器。为了简单起见,服务器可以标记为“Server1.com”和“Server2.com”

我需要做某种嵌套的 foreach 吗?是否也可以在 CSV 中列出服务器,以便显示 SamAccountName、Server、Name、EmailAddress? If 语句会起作用吗?完成此任务最简单的事情是什么?

谢谢。

嵌套 foreach 是我通常采用的方式,因为我还没有找到更好的方法来查询所有 AD 以获取此信息。

如果您知道服务器名称,您可以将它们放在一个数组中并为每个用户对象循环遍历它们。如果返回一个用户对象,您可以跳出服务器循环并继续处理下一个用户。我通常从包含大部分用户的最快服务器开始,然后相应地订购其余服务器。

代码是这样的

$servers = @("Server1", "Server2", "Server3")

Get-Content "C:\Users.txt" |
ForEach-Object {
    foreach ($server in $servers) {
        $aduser = Get-ADUser -Filter "SamAccountName -eq '$_'" -Properties Name, Mail -Server $server | Select-Object SamAccountName, Name, Mail
        if ($aduser) {
            $aduser # send object down the pipeline
            break   # break out of server loop and move to next user
        }

    }
} | Export-Csv 'C:\temp\testemail.csv' -NoTypeInformation