【问题标题】:PowerShell Compare-Object best resultPowerShell 比较对象最佳结果
【发布时间】:2018-10-08 21:56:42
【问题描述】:

我希望比较 2 个包含以下形式的电子邮件地址的文件:

$Current = Get-Content -Path myfileref

结果是这样的:

电子邮件 user1@mydomain.com user2@mydomain.com ...
$target = Get-Content -Path RefFile

结果是这样的:

PrimarySmtp地址 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”的对象“user1@mydomain.com” ...结束处理

我很确定 pb 来自输入对象,但我兜兜转转,无法理解为什么并解决这个问题。

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

【问题讨论】:

标签: powershell


【解决方案1】:

感谢 Ansgar,你让我走上了好路

首先:现在,我使用 import-csv 而不是 get-content

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

然后:

Compare-Object -ReferenceObject $Reflist -DifferenceObject $sql -Property mail | Where-Object {$_.SideIndicator -eq "=>"} 当然,在另一个方向上也是一样的。我得到了有用的结果

之后,foreach($UsersToAdd 中的$member)很容易做一个循环

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

再次感谢 奥利维尔

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-09
    • 1970-01-01
    • 2019-04-21
    • 2012-02-29
    • 1970-01-01
    • 2013-08-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多