【问题标题】:Powershell - Getting and organising Active Directory groups of machinePowershell - 获取和组织机器的 Active Directory 组
【发布时间】:2012-04-23 16:22:48
【问题描述】:

我一直在尝试使用下面的代码来获取目标机器所在的 AD 组列表,但我遇到了一些困难。

Get-AdComputer -Identity $hostname -property "MemberOf" 

当我执行代码时,我会返回这个。

DistinguishedName : CN=$hostname,OU=test,OU=test,OU=test All Workstations,DC=te
                st,DC=test,DC=com
DNSHostName       : $hostname    Enabled           : True
MemberOf          : {CN=Flash_Player_Adobe_11.1.102_LCL,OU=test All Softw
                    are Groups,DC=test,DC=test,DC=test, CN=Adobe Acrobat X P
                    rofessional 10,OU=test All Software Groups,DC=test,DC=test,D
                    C=co.uk, CN=Silverlight_Microsoft_4.0.60.0_LCL,OU=test
                All Software Groups,DC=test,DC=test,DC=test}
Name              : %hostname    ObjectClass       : computer
ObjectGUID        : 5cf00026-c91a-422e-8a3e-7ee546456717f
SamAccountName    : Test
SID               : f-1-5-21-18934363546-5655752-5353453-564535
UserPrincipalName : 

有没有一种方法可以让 memberOf 返回(附加到机器的 AD agroup 列表并在仅列出组名的列表中排序。例如:

Silverlight_Microsoft_4.0.60.0_LCL
Adobe Acrobat XP Professional

【问题讨论】:

    标签: powershell active-directory


    【解决方案1】:

    您可以使用正则表达式来提取组名:

    (Get-ADComputer -Identity $hostname -Property MemberOf).MemberOf -replace '^CN=([^,]+),OU=.+$','$1'
    

    【讨论】:

    • 谢谢,成功了。你能帮我解决这个问题吗?我正在尝试获取输出的组名并将它们放入 DataGridView 表单中,但我一直得到的只是输出到 DatagridView 的数字。 function Get-AD { $active_d = (Get-ADComputer -Identity $current_hostname.text -Property MemberOf).MemberOf -replace '^CN=([^,]+),OU=.+$','$1' $array = New-Object System.Collections.ArrayList $array.AddRange($active_d) $current_output.DataSource = $array $current_output.refresh() } 我目前正在使用上述方法,但它不起作用
    • 另外,你能简单解释一下 -replace '^CN=([^,]+),OU=.+$','$1' 吗?
    • 正则表达式捕获 CN= 和下一个逗号之间的任何内容,([^,]+) 表示任何不是逗号的字符。捕获正在替换整个字符串。
    • 试试这个:$groups = (Get-ADComputer -Identity $current_hostname.text -Property MemberOf).MemberOf -replace '^CN=([^,]+),OU=.+$' ,'$1'; ; $dgv = 新对象 Windows.Forms.DataGridView; $dgv.Columns.Add("Groups","Groups"); $组 | foreach { $null= $dgv1.Rows.Add($_) }
    • @ShayLevy 感谢这个 RegEx 脚本,帮助我解决了我正在研究的问题。
    【解决方案2】:

    奥林,

    不要忘记您的朋友 dsquery 和 dsget,它们也可以很好地与 powershell 配合使用。

    您执行 dsquery,然后使用 powershell 将其直接通过管道传输到 dsget -memberof 中,如果需要使用 foreach-object{$_trimstart(" ")} 进行修剪{$_trimstart(" ")}

    玩一下,让我们知道你用的是什么。

    直流

    【讨论】:

      【解决方案3】:

      试试这个:

      Get-AdComputer -Identity $hostname -property "MemberOf" | select -expand memberOf
      

      评论后编辑:

      试试这个,我现在不能测试它

      Get-AdComputer -Identity $hostname -property "MemberOf" | select -expand memberOf | % { ($_.split(','))[0].replace('CN=','')}
      

      【讨论】:

      • 谢谢。那行得通,但是您建议我如何过滤结果以便只显示应用程序名称?
      • 试试我的编辑,但它可能有一些错误,我现在无法测试。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-14
      • 1970-01-01
      • 2018-06-26
      • 2017-06-02
      • 2017-06-01
      相关资源
      最近更新 更多