PowerShell从多个组中获取所有用户

本·威尔逊

我正在尝试为每个组获取用户。然后获取有关用户的更多详细信息。

有人可以看到为什么下面的方法不起作用吗?

 do 
    {

$Group=@('"Group1"'
        '"Group2"',
        '"Group3"',
        '"Group4"',
        '"Group5"')

 try{
        $Group | ForEach{
    ForEach ($member in (Get-ADGroupMember $_ ))
    {
    $user = Get-ADUser $member -Properties *
    $useracc = $user.samaccountname
    $userid = $user.EmployeeID
    $userout = $useracc + "    -    " + $userid
    write-output $userout | out-file -filepath c:\temp\New.txt -Append -NoClobber
    }
    }
    }
    Catch
        {
    write-output $userout | out-file -filepath c:\temp\error.txt            }


    }
until ($memeber -eq $Null)
疯狂技术员

好的,让我们开始吧Do{}Until(),至少在您给出的示例代码中循环是没有意义的。接下来,您的全局性应有所降低Try/Catch我避免将ForEach循环放在ForEach-Object循环中,因为要跟踪事物确实很困难,但这就是我。

因此,您具有上述功能。我将“'Group1'”替换为我所属的域中某个组的专有名称,按原样运行您的代码,并输出了预期的文件。没有理由不能与多个组一起使用。这有点慢,但是我将其归因于脚本的编写方式。我重新编写了一下,它应该做同样的事情,但是速度更快,并且错误处理也更好一些:

$Groups=@('"Group1"'
    '"Group2"',
    '"Group3"',
    '"Group4"',
    '"Group5"')
ForEach($Group in $Groups){
    Try{
        Get-ADGroupMember $Group | Where {$_.objectClass -eq 'user' } | Select -expand distinguishedName | Get-ADUser -Properties EmployeeID | ForEach {
            "{0}`t-`t{1}" -f $_.samaccountname, $_.employeeid | Add-Content C:\Temp\New.txt
        }
    }
    Catch{
        "Error getting members for $Group" | Add-Content C:\Temp\Errors.txt
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章