限制Powershell结果/输出

时间:2016-12-15 00:19:56

标签: powershell active-directory output restriction

以下查询正常工作:

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组。

2 个答案:

答案 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)。