我正在使用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
必须能够为“联系人”而不是用户执行此操作。
提前致谢!
答案 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关系,那么我们就停止了。