在PowerShell中获取通讯组属性并打印到文件

在PowerShell中获取通讯组属性并打印到文件,powershell,active-directory,exchange-server,exchange-server-2013,Powershell,Active Directory,Exchange Server,Exchange Server 2013,所以,我已经建立了一个脚本,在Stack周围的优秀人员的帮助下,该脚本为分发组轮询广告,并创建一个填充了 显示名称 SAM帐户名 组的主SMTP地址 已接受发件人的SMTP地址, 主持人的SMTP地址 管理者的SMTP地址 前3个很容易获得,因为它们是通讯组的标准属性。当我尝试将组成员身份中的显示名称转换为已接受发件人的主SMTP地址时,会遇到一个挑战,该地址由中间发件人和管理发件人。当前脚本用于获取SMTP地址,但是我们用于筛选的显示名也偶尔用于辅助帐户和第三帐户,因此偶尔我们会为每个显示名返

所以,我已经建立了一个脚本,在Stack周围的优秀人员的帮助下,该脚本为分发组轮询广告,并创建一个填充了

显示名称 SAM帐户名 组的主SMTP地址 已接受发件人的SMTP地址, 主持人的SMTP地址 管理者的SMTP地址 前3个很容易获得,因为它们是通讯组的标准属性。当我尝试将组成员身份中的显示名称转换为已接受发件人的主SMTP地址时,会遇到一个挑战,该地址由中间发件人和管理发件人。当前脚本用于获取SMTP地址,但是我们用于筛选的显示名也偶尔用于辅助帐户和第三帐户,因此偶尔我们会为每个显示名返回多个结果。我需要从列表中筛选这些二级和三级电子邮件帐户。幸运的是,我们有一个辅助字段,一个extensionAttribute,如果它是主用户帐户,那么它总是用1填充。所以我试图用一个-和extensionAttribute8-eq“1”修改-过滤器,结果它在我身上爆炸了。我还尝试添加一个额外的-Properties字段来引用extensionattribute,但也没有做任何事情

它只是不断地以失败告终

ActiveDirectlyCmdlet.Microsoft.ActiveDirect.Management.AdfilterParsingException,Microsoft.adtiveDirectory.Management.Commands.GetADUser

下面是我尝试编写的脚本,希望你们中的一位PowerShell大师能在这里帮助我

提前感谢所有的帮助

瑞安

下面是我试图修改的脚本,仅供参考

$props = @(
    "DisplayName"
    "SamAccountName"
    "PrimarySmtpAddress"
    @{n='Accepted Senders';e= {($_.acceptmessagesonlyfromsendersormembers | Foreach-Object {
    (Get-AdUser -Filter "DisplayName -eq '$($_.Split('/')[-1])'" -Property ProxyAddresses |
        Select-Object -Expand ProxyAddresses | Where-Object {$_ -cmatch '^SMTP:*.*@*.com'}) -replace '^SMTP:*.*@*.com'}) -join ';'}}
    "ModerationEnabled"
    @{N="ModeratedBy";E= {($_.ModeratedBy | ForEach-Object {
    (Get-AdUser -Filter "DisplayName -eq '$($_.Split("/")[-1])'" -Property ProxyAddresses |
        Select-Object -Expand ProxyAddresses | Where-Object {$_ -cmatch '^SMTP:'}) -replace '^SMTP:'}) -join ';'}}
    @{Name="Internal Senders Only";E={$_.RequireSenderAuthenticationEnabled}}
    @{N="ManagedBy";E= {($_.ManagedBy | ForEach-Object {
    (Get-AdUser -Filter "DisplayName -eq '$($_.Split("/")[-1])'" -Property ProxyAddresses |
        Select-Object -Expand ProxyAddresses | Where-Object {$_ -cmatch '^SMTP:'}) -replace '^SMTP:'}) -join ';'}}
        )
Get-DistributionGroup -ResultSize Unlimited | Select-Object $props | export-Csv C:\temp\testforformat.csv -NoTypeInformation
``



在我看来,您似乎在重复相同的Get ADUser代码,这使得读取/修改非常困难。 我建议您创建一个小助手函数来获取主SMTP电子邮件地址。大概是这样的:

function Get-SMTPAddress ([string]$DisplayName) {
    $filter = "DisplayName -eq '$DisplayName' -and extensionAttribute8 -eq '1'"
    ((Get-AdUser -Filter $filter -Properties DisplayName, ProxyAddresses, extensionAttribute8).ProxyAddresses |
      Where-Object {$_ -cmatch '^SMTP:'}) -replace '^SMTP:'
}
有了这一点,构建属性阵列可以变得更加清晰:

$props = 'DisplayName',
         'SamAccountName',
         'PrimarySmtpAddress',
         @{Name = 'Accepted Senders'
           Expression = {($_.acceptmessagesonlyfromsendersormembers | Foreach-Object { Get-SMTPAddress $_.Split('/')[-1] }) -join ';'}},
         'ModerationEnabled',
         @{Name = 'ModeratedBy'
           Expression = {($_.ModeratedBy | Foreach-Object { Get-SMTPAddress $_.Split('/')[-1] }) -join ';'}},
         @{Name = 'Internal Senders Only'; Expression = {$_.RequireSenderAuthenticationEnabled}},
         @{Name = 'ManagedBy'
           Expression = {($_.ManagedBy | Foreach-Object { Get-SMTPAddress $_.Split('/')[-1] }) -join ';'}}
显然未经测试,这将为您提供输出:

Get-DistributionGroup -ResultSize Unlimited | 
    Select-Object $props | 
    Export-Csv C:\temp\testforformat.csv -NoTypeInformation

您需要在引号中包含-和条件-筛选器需要一个字符串。因此我修改了每个语句,使之类似于下面的语句@{n='Accepted Senders';e={$\.AcceptMessagesOnly FromSendersOrMembers{124; Foreach对象{Get AdUser-Filter DisplayName-eq'$$\.Split'/'[-1]'-和'ExtensionAttribute'-eq'1'-属性'ExtensionAttribute'8','ProxyAddresses'.\124;选择对象-展开ProxyAddresses |其中对象{$'-cmatch'^SMTP:'}-替换'^SMTP:''-join'}}但它仍然不起作用。我的脚本根本不返回任何结果。AFAIK DisplayName不是Get ADUser的默认属性的一部分,因此您需要将其添加到-properties参数中。首先,感谢您的帮助。这非常有见地,不幸的是,由于某些原因,我们无法再从脚本中获取已接受发件人、主持人和管理者的smtp地址。它三天前还在工作并输出数据,只是没有收到默认的电子邮件。我将继续并将此标记为已回答。但是,由于我们在选择过程中不再收到任何错误,它只是不给我任何数据,但即使是我最初使用的脚本也不会返回请求用户的smtp地址。“多好的一天啊!”Ryan谢谢你的反馈。从你所描述的,很难找出是什么原因造成的。我将在helper函数中添加Write Host Finding user$DisplayName,以查看此参数是否真正对应于AdUser。然后,如果有,使用ADUC查看extensionAttribute8的值是多少。
Get-DistributionGroup -ResultSize Unlimited | 
    Select-Object $props | 
    Export-Csv C:\temp\testforformat.csv -NoTypeInformation