PowerShell Compare-Object最佳结果

时间:2018-10-05 09:54:43

标签: powershell

我要比较包含以下格式的电子邮件地址的2个文件:

$Current = Get-Content -Path myfileref

结果是这样的:

email
user1@mydomain.com
user2@mydomain.com
...
$target = Get-Content -Path RefFile

结果是这样的:

PrimarySmtpAddress
user1@mydomain.com
user3@mydomain.com
...

请注意,两个文件的标题不同

我愿意:

$AddNewMember = Compare-Object -ReferenceObject ($Target.GetEnumerator() -ne "PrimarySmtpAddress") -DifferenceObject ($Current.GetEnumerator() -ne "Mail") |
                Where-Object {$_.SideIndicator -contains "==>"}

结果是这样的:

InputObject SideIndicator
"user2@mydomain.com" ==>
...

请注意电子邮件地址前后的“

然后我想使用Add-DistributionGroupMember命令:

foreach ($Member in $AddNewMember) {
    Add-DistributionGroupMember -Identity $ListName -Member $Member.inputObject -DomainController "SpecificDC.myDomain.com" -Confirm:$false -ErrorAction SilentlyContinu
}

但是什么也没发生!详细模式告诉我

  

...正在根“ $ null”下搜索类型为“ ADrecipient”的对象“ myuser.mydomain.com” ...结束处理

我很确定pb来自输入对象,但是我转了一圈,无法理解原因并解决了这个问题。

输入对象尝试传递““ user1@mydomain.com””而不是“ user1@mydomain.com”。

1 个答案:

答案 0 :(得分:0)

感谢Ansgar,您对我的看法很好

首先:现在,我使用 import-csv 而不是获取内容

第二个:我在import-csv期间标准化了标头(相同的标头,即使它不是相同的)。 Import-Csv -path $ File -Header Mail

然后:

比较对象-ReferenceObject $ Reflist -DifferenceObject $ sql-属性邮件| Where-Object {$ _。SideIndicator -eq“ =>”} 当然,在另一方向上也是一样。我得到了可用的结果

之后,很容易为每个循环($ UsersToAdd中的$ member)

Add-DistributionGroupMember -Identity $ List -Member $ Member.mail -DomainController xxxx -Confirm:$ false -ErrorAction SilentlyContinue 然后是 Remove-DistributionGroupMember

再次感谢 奥利维尔

相关问题