【问题标题】:How to compare to properties of an object from get-mailbox如何从get-mailbox比较对象的两个属性
【发布时间】:2023-03-20 04:50:01
【问题描述】:

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

【问题讨论】:

  • 你能给我一个你想要匹配的例子,另一个你不想匹配的例子
  • 我不确定我是否理解。我正在针对多个 OU 运行 get-mailbox 并获取每个用户的输出显示名称、samaccountname、userprincipalname 和 sip 地址。对于每个用户,我正在尝试使用检查 $ 的 if 语句验证 userprincipalname 和 sip 地址是否相同_.emailaddresses 和 $_.userprincipalname 变量,但这些变量似乎不是正确的,因为我对每个人都是错误的,并且 99% 匹配,所以几乎所有人的输出都应该是正确的。
  • 您是否手动检查了EmailAddresses 以确认它们是否正确?

标签: powershell variables object compare sip


【解决方案1】:

切勿在管道中使用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 }}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-08
    • 1970-01-01
    相关资源
    最近更新 更多