【问题标题】:Powershell JoinPowershell 加入
【发布时间】:2012-01-19 12:52:09
【问题描述】:

我有一个 AD 查询来导出所有组成员,效果很好。

Get-QADUser -searchRoot $OuDomain -SizeLimit 0 
| Select-Object dn, sAMAccountName, @{Name="Groups";Expression={(Get-QADMemberOf $_ 
| Select-Object -expandProperty Name) -join ";"}} 
| export-csv $FilePath | Sort-Object SamAccountName

结果:

DN        SamAccountName    Groups
abc.com   user1             group1;group2;group3

如何将以上结果分列导出,如:

DN       SamAccountName  Groups
abc.com  user1           group1
         user1           group2
         user1           group3

请查看http://pastebin.com/JMZ863YY

【问题讨论】:

  • 感谢 Seki 的格式化。

标签: powershell active-directory powershell-2.0


【解决方案1】:

而不是-join,其目的是保留一个(用户)对多(组)记录,您需要做这样的事情(未经测试)。试试看:

$users = Get-QADUser -searchRoot $OuDomain -SizeLimit 0
$users | Sort-Object SamAccountName | % {
    $user = $_ | Select-Object dn, sAMAccountName
    if ($lastDomain -eq $user.dn) {
        $lastDomain = ""
    } else {
        $lastDomain = $user.dn
    }
    $groups = Get-QADMemberOf $_ | Select-Object -expandProperty Name
    $groups | % {
        $user2 = New-Object -TypeName PsObject -Property @{
                "Domain" = $lastDomain
                "sAMAccountName" = $user.sAMAccountName
                "Group" = $_
            } 
        $user2
    }
} | export-csv $FilePath

【讨论】:

  • 嗨安迪,我收到错误消息“Get-QADMemberOf:无法绑定参数'Identity'。无法转换“@{DN=CN=test,OU=test1,OU=test,OU= abc,DC=xyz,DC=com; Sam AccountName=k201293}”类型“Selected.Quest.ActiveRoles.ArsPowerShellSnapIn.Data.ArsUserObject”的值以键入“Quest.ActiveRoles.ArsPowerShell SnapIn.Data.IdentityParameter”。”
  • 嗨安迪,非常感谢,我收到的输出是完美的,它抛出了很多错误消息我有超过 2000 万用户。请看pastebin.com/rS5CLR3b
  • 抛出了'System.OutOfMemoryException'类型的异常,如何纠正这个错误
  • @Naveenk 这是因为管道在内存中缓冲事物的方式,由于管道到export-csv。我实际上创建了一个有 20K 用户的测试广告来试用它,我发现了这个问题。我可能很快就能看一看。
猜你喜欢
  • 2010-12-23
  • 1970-01-01
  • 1970-01-01
  • 2023-02-05
  • 2011-02-10
  • 1970-01-01
  • 1970-01-01
  • 2014-09-30
  • 2016-02-18
相关资源
最近更新 更多