获取Active Directory中的所有空组

时间:2012-08-13 20:38:43

标签: powershell quest

我一直试图找出如何获取所有空的Active Directory组。我想出了这个命令,它选择没有成员但不是成员的组。

Get-QADGroup -GroupType Security -SizeLimit 0 | where-object {$_.Members.Count -eq 0 -and $_.MemberOf.Count -eq 0} | select GroupName, ParentContainer | Export-Csv c:\emptygroups.csv

这大多是正确的,但是它说默认组域计算机之类的某些组是空的,但它不是空的。此特定组仅包含计算机成员,但似乎未选择仅包含计算机的其他组。

有谁知道为什么这个命令会引入一些拥有成员的命令?

6 个答案:

答案 0 :(得分:4)

Get-QADGroup cmdlet的参数为-Empty。帮助提示中提供了返回这些默认组的原因:

  

注意:如果未设置“成员”属性,则该组被视为空。因此,此参数可以检索仅包含将该组设置为主要组的成员的组。一个例子是Domain Users组,它通常是任何用户帐户的主要组,同时没有设置“member”属性。

我对Quest的东西并不熟悉,但我能够以这种方式找到空组,(可能不是最有效的):

Get-ADGroup -Filter {GroupCategory -eq 'Security'} | ?{@(Get-ADGroupMember $_).Length -eq 0}

答案 1 :(得分:3)

此行将执行(首先使用Import-Module ActiveDirectory):

Get-ADGroup -Filter * -Properties Members | where { $_.Members.Count -eq 0 }

答案 2 :(得分:1)

此版本仅显示groupcategory和SAMaccountname。名称也可用于代替samaccountname。 groupcategory将显示其是安全组还是DL。

Get-ADGroup –Filter * -Properties Members | where { $_.Members.Count –eq 0 } |select groupcategory,samaccountname >c:\temp\nomembers.csv

答案 3 :(得分:1)

实际上,在具有多个域,大量组(以及大量用户)的环境中,将其作为脚本运行会更快丢失。 注意:您需要加载PowerShell Active目录模块(import-module activedirectory)

     $domains = Get-ADForest|select -ExpandProperty domains
     $empties = @()
     $oops = @()
     foreach ($d in $domains){
     $groups = get-adgroup -filter * -server $d
     foreach ($g in $groups){
     $q = get-adgroup $g -properties members -server $d|select -expandproperty members
     If(!$?){$oops += $g
     write-host $g.name}
     if ($q -eq $null) {$empties += $g}
     }
     }
     $empties|select name,distinguishedname|export-csv .\empties.csv
     $oops|select name,distinguishedname|export-csv .\oops.csv

答案 4 :(得分:1)

这对我有用。

Get-ADGroup -Filter {GroupCategory -eq 'Security'} -Properties Members | where { $_.Members.Count -eq 0 } | Select Name | Sort-Object Name

答案 5 :(得分:0)

能够通过在Get-QADGroupMember中管道并获取成员 MemberOf 的计数来正确获取值,然后可以对其进行过滤。这似乎非常低效,但它的目的是获得所需的计数。

Get-QADGroup -SizeLimit 0 | Select-Object Name,@{n='MemberCount';e={ (Get-QADGroupMember $_ -SizeLimit 0 | Measure-Object).Count}},@{n='MemberOfCount';e={ ((Get-QADGroup $_).MemberOf | Measure-Object).Count}}

如果有人有更好的方法来做到这一点,请告诉。