导出嵌套组联系人是memberOf

时间:2016-07-15 04:19:44

标签: powershell exchange-server

我正在使用Exchange 2010和Powershell。

我希望导出交换联系人所属的所有“嵌套”通讯组。

例如,如果联系人是两个DG,A和B的成员。而A组也是一个成员组C.我想要一个列表显示所有三个组。

try:
    import Image
except ImportError:
    from PIL import Image
import pytesseract

img = Image.open('test.bmp')
img.load()
i = pytesseract.image_to_string(img)
print i

这是我非常努力的尝试。我想它需要递归完成?

      Group C      
    ----|-----------|
     Group A     Group B
             |
          Contact

必须能够为“联系人”而不是用户执行此操作。

提前致谢!

2 个答案:

答案 0 :(得分:0)

您真的不需要Exchange来获取通讯组。 这是我的示例,用于检索组的名称,假设您的联系人是已填写邮件属性的AD用户:

function Get-GroupsRec
{
[CmdletBinding()]
param(
[Parameter(ValueFromPipeline=$true)]
$Identity
)
BEGIN {}
PROCESS{
    if($Identity -eq $null){return}
    Write-Output $Identity | select -ExpandProperty samaccountname
    $Identity | Get-ADPrincipalGroupMembership | ?{$_.GroupCategory -eq "Distribution"} | Get-GroupsRec}
END{}
}
Get-ADUser -Filter {mail -eq 'email@domain.com.au'} | Get-ADPrincipalGroupMembership | ?{$_.GroupCategory -eq "Distribution"} | Get-GroupsRec

但只要您可以检索AD用户,此解决方案就有效。

更新: 版本仅基于Get-ADObject。 (相同的结构,只有不同的选择器。为了便于阅读,在过滤器中保留了ObjectClass):

function Get-GroupsRec
{
[CmdletBinding()]
param(
[Parameter(ValueFromPipeline=$true)]
$Identity
)
BEGIN {}
PROCESS{
    if($Identity -eq $null){return}
    Write-Output $Identity | select -ExpandProperty Name
    $Identity | select -ExpandProperty MemberOf | Get-ADObject -Properties GroupType,MemberOf |?{$_.GroupType -gt 0 -and $_.ObjectClass -eq 'group'} | Get-GroupsRec }
END{}
}
Get-ADObject -Filter {mail -eq 'email@domain.com.au'} -Properties MemberOf | select -ExpandProperty MemberOf | Get-ADObject -Properties GroupType,MemberOf |?{$_.GroupType -gt 0 -and $_.ObjectClass -eq 'group'} | Get-GroupsRec

如果要将组类型限制为特定类型,可以将代码中的GroupType修改为-band运算符的任何值。枚举器值位于:https://msdn.microsoft.com/en-us/library/aa772263(v=vs.85).aspx

答案 1 :(得分:0)

你走在正确的轨道上。你确实需要递归。我很快把一些东西放在一起,这些东西应该会重新成为会员。希望这有帮助!

Function Get-Groups {
    Param(
        [string]$Identity
    )

    $members = Get-ADObject -Identity $Identity -Properties "MemberOf"
    $members.MemberOf | % {
        if($(Get-ADObject $_ -Properties "GroupType").grouptype -gt 0) {
            Write-Host $_
        }
        Get-Nestedmember $_ "->"
    }
}

Function Get-Nestedmember {
    Param(
        [String]$Identity,
        [string]$Depth
    )
    $members = (Get-ADobject -Identity $Identity -Properties "MemberOf").memberof
    $count = $members | measure
    if($count -ne 0) {
        $members | % {
        if($(Get-ADObject $_ -Properties "GroupType").grouptype -gt 0) {
            Write-host "$Depth $_"
        }    
            Get-Nestedmember $_ "-$Depth"
        }
    }
}
Get-Groups -Identity '<Your Identity goes here>'

它获得了MemberOf关系,并为结果集再次执行此操作。如果MemberOf返回0表示没有更多的MemberOf关系,那么我们就停止了。