我要比较包含以下格式的电子邮件地址的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”。
答案 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
再次感谢 奥利维尔