如何与get邮箱中对象的属性进行比较



我正在尝试确认使用get-mailbox的每个用户的userprincipalname和sip地址是否匹配。我知道有些用户不匹配,但我的脚本对每个邮箱都返回true。知道我做错了什么吗?

Get-Mailbox -ResultSize Unlimited -OrganizationalUnit $_ | fl |
Select-Object DisplayName, 
    Samaccountname, 
    Userprincipalname, 
        @{n='EmailAddresses';e={$_.EmailAddresses | ?{$_ -match '^sip'}|%{$_ -replace 'sip:',''}}} | foreach{  If($_.emailaddresses -eq "$($_.Userprincipalname)"){'True'}else{'False'}}}

永远不要在管道中使用Format-* cmdlet,除非这是向用户显示内容的最后一步,或者您将使用Format-* | Out-String | Out-File保存i)。| fl |正在破坏您的管道,因为它输出的是特殊格式的对象,而不是原始数据。所以从开始

$users = Get-Mailbox -ResultSize Unlimited -OrganizationalUnit $_ |
Select-Object DisplayName, 
    Samaccountname, 
    Userprincipalname, 
    @{n='EmailAddresses';e={$_.EmailAddresses | ?{$_ -match '^sip'}|%{$_ -replace 'sip:',''}}}
$users

它输出了什么吗?列表中的值正确吗?我没有可供测试的Exchange,但我认为EmailAddresses返回的对象会像这样使用:

@{n='EmailAddresses';e={$_.EmailAddresses | ? {$_.PrefixString -eq 'sip' }| % { $_.AddressString }}}`

在你验证了它看起来不错之后,你可以添加自动测试,比如:

$Users | Foreach-Object {
    If($_.emailaddresses -eq "$($_.Userprincipalname)") {
        'True'
    } else {
        'False'
    }
}

$Users | Select Name, DisplayName, Samaccountname, Userprincipalname, EmailAddress, @{n="UPNandEmailMatch";e={$_.Userprincipalname -eq $_.EmailAddress }}

相关内容

  • 没有找到相关文章

最新更新