【问题标题】:PowerShell Getting All Users From Multiple GroupsPowerShell 从多个组中获取所有用户
【发布时间】:2015-04-09 02:01:56
【问题描述】:

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

有人可以看到为什么以下内容不起作用吗?

 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)

【问题讨论】:

  • 至少你错过了 3 个右括号,据我所知,你没有输出任何东西,只是将 $user 一个一个地分配给每个用户,根本不输出它。跨度>
  • 这只是一个片段,所有内容都正确关闭,还有更多内容需要关注。
  • 至少改变ForEach循环,这样你就不会重复使用$user,所以ForEach($user in (get-adgroupmember $_))变成ForEach($member in (get-adgroupmember $_)),然后改变$user = Get-ADUser $user -prop *来指定像@这样的专有名称属性987654327@ ...看看是否有帮助。
  • 最好的做法是为我们提供可以使用的代码,以便我们可以重复使用它,而不是让我们修复小错误以便进行测试。
  • @TheMadTechnician 你不妨让你的评论成为答案

标签: powershell foreach


【解决方案1】:

好的,让我们开始吧,您的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
    }
}

【讨论】:

  • Prefect,我想我只是在我的 Foreach 中迷路了,就像你解释的那样,我做了一些小的编辑,但对于我的并添加了一些,你的 eaxmple 中有一个小错字,数组应该是组,而不是组。
  • 对,那是一种类型(我使用了一个实际的组,所以我没有从我的 PowerShell 中复制/粘贴该部分,我只是从你的示例中抓取它)。我已经更新了答案,谢谢你抓住它!
猜你喜欢
  • 2017-06-02
  • 1970-01-01
  • 2022-11-10
  • 2021-12-08
  • 2011-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-05
相关资源
最近更新 更多