我正在尝试确认使用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 }}