【问题标题】:How do I combine these 3 powershell commands into a single line?如何将这 3 个 powershell 命令组合成一行?
【发布时间】:2015-04-20 00:02:57
【问题描述】:

我需要从电子邮件联系人中选择三段数据,并将它们放入列中,(export-csv 样式列)。

我不确定如何“拆分”以下命令的输出。

获取主 SMTP 地址

ForEach ($address in Get-Mailbox -ResultSize Unlimited | Select EmailAddresses) {$address.EmailAddresses | Where {$_.Prefix -match"smtp" -and $_.IsPrimaryAddress -eq $true} | Select AddressString }

获取所有 smtpAddresses(希望省略主要的)

ForEach ($address in Get-Mailbox -ResultSize Unlimited | Select EmailAddresses) {$address.EmailAddresses | Where {$_.Prefix -match "SMTP" } | Select AddressString }

获取 X500 地址

ForEach ($address in Get-Mailbox -ResultSize Unlimited | Select EmailAddresses) {$address.EmailAddresses | Where {$_.Prefix -match "x400" } | Select AddressString }

如何将它们合并到一个列中?

【问题讨论】:

    标签: email powershell exchange-server powershell-3.0 exchange-server-2010


    【解决方案1】:

    我很可能会做这样的事情

    $results =  Get-Mailbox -ResultSize Unlimited | ForEach-Object{
        $props = @{
            Name = $_.alias
            Primary = $_ | Select -ExpandProperty emailaddresses | 
                    Where {$_.Prefix -cmatch "SMTP" -and $_.IsPrimaryAddress -eq $true} | 
                    Select-Object -ExpandProperty AddressString 
            Secondary = $_ | Select -ExpandProperty emailaddresses | 
                    Where {$_.Prefix -cmatch "smtp" } | 
                    Select-Object -ExpandProperty AddressString 
            x400 = $_ | Select -ExpandProperty emailaddresses | 
                    Where {$_.Prefix -match "x400" } |  
                    Select-Object -ExpandProperty AddressString   
        }
    
        New-Object –TypeName PSObject -Property $props
    } 
    
    $results | Export-CSV -NoTypeInformation C:\temp\export.csv
    

    我在 ISE 中使用我的机器上的 [pscustomobject] 对此进行了编码,但我的交换服务器只有 PowerShell 2.0 版。更新为将New-Object 与电子邮件的属性一起使用,因为您已将它们分解,并使用邮箱别名来帮助识别输出。

    您还需要使用-cmatch,因为主要和次要与字符串“SMTP”的大小写相关联

    如果您有至少 3.0 版的 PowerShell 供您使用,这也可以使用

    Get-Mailbox -ResultSize Unlimited | ForEach-Object{
        [pscustomobject]@{
            Name = $_.alias
            Primary = $_ | Select -ExpandProperty emailaddresses | 
                    Where {$_.Prefix -cmatch "SMTP" -and $_.IsPrimaryAddress -eq $true} | 
                    Select-Object -ExpandProperty AddressString 
            Secondary = $_ | Select -ExpandProperty emailaddresses | 
                    Where {$_.Prefix -cmatch "smtp" } | 
                    Select-Object -ExpandProperty AddressString 
            x400 = $_ | Select -ExpandProperty emailaddresses | 
                    Where {$_.Prefix -match "x400" } |  
                    Select-Object -ExpandProperty AddressString   
        }
    } | Export-CSV -NoTypeInformation C:\temp\export.csv
    

    附注关于辅助地址。

    如果您有多个,则使用另一个字符分隔输出可能会更好。

            Secondary = ($_ | Select -ExpandProperty emailaddresses | 
                    Where {$_.Prefix -cmatch "smtp" } | 
                    Select-Object -ExpandProperty AddressString) -join ";"
    

    该代码现在可以正常工作,并且只要只有一个辅助代码就无害。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-07
      • 2017-01-01
      • 1970-01-01
      • 2019-02-11
      • 2012-09-02
      • 2015-09-13
      相关资源
      最近更新 更多