使用Get-AzureADUser在PowerShell中删除具有特定域的完整电子邮件

时间:2018-07-24 18:41:09

标签: powershell email scripting azure-active-directory

我当前正在使用以下脚本。

 Get-AzureADUser |
    Select-Object @(
        @{L = "Name"; E = { $_.DisplayName}}
        @{L = "Email"; E = { $_.UserPrincipalName}}
        @{L = "Aliases"; E = { $_.ProxyAddresses -replace '^smtp:' -join ';' }}
    )

我的大多数结果都返回一个类似于email@domain.onmicrosoft.com的电子邮件地址。我需要从“别名(ProxyAdresses)”字段中的阵列中删除这些电子邮件。本质上,任何包含onmicrosoft.com的电子邮件都需要删除。

当前结果:email1@domain.com;email2@domain.com;email3@domain.onmicrosoft.com

期望的结果:email1@domain.com;email2@domain.com

1 个答案:

答案 0 :(得分:1)

您可以在此处链接另一个运算符,以充当过滤器:

Get-AzureADUser |
    Select-Object @(
        @{L = "Name"; E = { $_.DisplayName}}
        @{L = "Email"; E = { $_.UserPrincipalName}}
        @{L = "Aliases"; E = { $_.ProxyAddresses -notlike '*onmicrosoft*' -replace '^smtp:' -join ';' }}
    )

但是现在阅读变得越来越困难。请注意,该表达式是一个完整的脚本块,因此您可以将其分成多行并更清楚地写出内容,例如:

Get-AzureADUser |
    Select-Object @(
        @{L = "Name"; E = { $_.DisplayName}}
        @{L = "Email"; E = { $_.UserPrincipalName}}
        @{L = "Aliases"; E = { 

            $filteredMails = $_.ProxyAddresses | Where-Object { 
                $_ -notlike '*onmicrosoft*'
            }

            $filteredMails = $filteredMails -replace '^smtp:'

            $filteredMails -join ';' 

        }}
    )