(Powershell)方法返回特定用户具有“写入成员”安全性的组列表

我们使用一个基于networking的软件,用户可以login到该软件,以pipe理访问由AD控制的共享。 用户可以pipe理的组列表是他们具有“写入成员”安全性的组。 这允许用户维护文件共享而不需要知道AD。

我正在尝试使用quest.activeroles.admanagement编写Powershell脚本,该脚本将返回指定用户具有“写入成员”安全性的整齐列表,以清除离职用户的权限。 我需要search的组存储在一个OU中,尽pipe有超过1000个。

我到目前为止已经想出了:

add-pssnapin quest.activeroles.admanagement Get-QADObject -ShowProgress -SearchRoot 'domain.server.com/path/to/OU' -SearchScope 'OneLevel' -Type Group -SizeLimit 2500 | Get-QADPermission -Rights 'WriteProperty' -Property 'member' -Account "user" -WarningAction SilentlyContinue 

这工作正常(但效率不高),但主机输出相当混乱:

 Permissions for: full.domain.path/OU/path/group1 Ctrl Account Rights Source AppliesTo ---- ------- ------ ------ --------- Domain\user Write member Not inherited This object and all child objects Permissions for: full.domain.path/OU/path/group2 Domain\user Write member Not inherited This object and all child objects Not inherited This object and all child objects Permissions for: full.domain.path/OU/path/group3 Domain\user Write member Not inherited This object and all child objects Not inherited This object only Permissions for: full.domain.path/OU/path/group4 Domain\user Write member Not inherited This object and all child objects Not inherited This object and all child objects 

我得到了所需的信息,但围绕它的是很多的糠</s>。 如果我pipe/附加到一个文本文件,我只得到用户名,而不是组名。 理想情况下,我想要的只是一个没有OUpath的组名列表,或者在完美的世界中,一列是用户名,第二列是组,这样我就可以运行多个用户(foreach( $ username中的$ username)):

 User Group domain\username group_name_one domain\username group_name_two domain\username group_name_three 

以这种方式解决这个问题的最好办法是Export-CSV会吐出一些更好的东西?

这里有两个问题。

  1. CMDlet Get-QADPermission在执行期间直接写入控制台,这就是为什么你看到Permissions for: ... 由于您的pipe道正在写入相同的输出,它们都混合在一起。 将pipe道输出存储到variables中。

  2. 当你将组pipe入Get-QADPermission ,你会扔掉组对象并获得一个权限对象。 如果要保留原始对象,则需要使用Where-Object进行过滤。

另外,请小心使用Get-QADPermission 。 如果只查询WriteProperty ,则不会返回带有Read + Write访问权限的结果。 通常你想查询两者。 而且在大多数情况下,您还希望使用-Inherited获取父OU授予的权限。 如果你真的想要一次性的权限,那么你可以忽略这个开关。

 function Test-UserCanModifyGroupsInOU ($Username, $OU) { $results = Get-QADGroup -SearchScope 'OneLevel' -SearchRoot $OU | Where-Object { $_ | Get-QADPermission -Rights ReadProperty,WriteProperty -Property member -Account $username } | Select @{Name="User";Expression={$username}}, @{Name="Group";Expression={$_.Name}} $results | Write-Output $results | Export-Csv "$username.csv" } @("bob","sally") | ForEach-Object { Test-UserCanModifyGroupsInOU -Username $_ -OU 'domain.org.com/path/to/OU' } 

另外请注意,这只适用于特定属性的权限。 即使允许修改成员属性,它也不会返回对组具有“完全控制”权限的用户的结果。