以下查询正常工作:
Get-ADUser -Filter 'Division -like "PNCC"' -Properties * |
Select-Object Name, @{name=”MemberOf”;expression={$_.memberof -join “;”}} |
Export-Csv test.txt -NoTypeInformation
但是,客户要求是显示组成员的特定子集。
如何限制返回的memberof
组,无论是组所在的父OU还是组名?父OU具有3个子OU。在这3个子OU中是实际的AD组。
答案 0 :(得分:0)
使用过滤器扩展计算属性的表达式,例如像这样:
$groups = 'foo', 'bar'
... | Select-Object Name, @{n='MemberOf';e={
@($_.memberof | Get-ADGroup | Where-Object {$groups -contains $_.Name}) -join ';'
}} | ...
答案 1 :(得分:0)
我认为@Ansgar的答案会起作用,但我认为它会产生太多的噪音并且可能会稍微优化一下。由于组的数量通常应该低于用户数,因此收集应首先报告的群组的distinguishedNames可能会更聪明(小型黑客以避免收集空组):
$groupsInOu = Get-ADGroup -SearchBase 'OU=DGG,DC=domain,DC=com' -LDAPFilter '(member=*)' |
ForEach-Object { $_.DistinguishedName }
Get-ADUser -Filter 'Division -like "PNCC"' -Properties * |
Select-Object Name, @{name=”MemberOf”;expression={($_.memberof | Where-Object { $groupsInOu -contains $_ }) -join ';' } } |
Export-Csv test.txt -NoTypeInformation
或者如果你想过滤一个名字(或任何其他属性),我会创建一个带有DistinguishedName作为键的哈希表和带有你关心的属性(或属性)的AD对象:
$groupsHash = @{}
Get-ADGroup -LDAPFilter '(member=*)' |
ForEach-Object {
$groupsHash.Add($_.DistinguishedName, $_)
}
Get-ADUser -Filter 'Division -like "PNCC"' -Properties * |
Select-Object Name, @{name=”MemberOf”;expression={($_.memberof | Where-Object { $groupsHash[$_].Name -match 'someRegex' }) -join ';' } } |
Export-Csv test.txt -NoTypeInformation
除非您打算在报告中使用其他一些属性,否则我会更加具体地了解我想要的属性(-Properties memberof
)。