如何添加ExternalEmailAddress存在性校验 避免重复创建mailContact
实现方案
你只需要在创建邮件联系人的逻辑前增加ExternalEmailAddress存在性校验即可,这里可以用Get-Recipient命令来校验该外部邮箱地址是否已经存在对应收件人对象,存在则直接跳过后续创建操作,避免报错。
修改后的完整代码
If (Test-Path $CSVFileName) { # 导入CSV文件 $csvfile = Import-CSV $CSVFileName # 遍历CSV每一行数据 foreach ($line in $csvfile) { try { # 先校验当前外部邮箱地址是否已存在对应收件人 $existingRecipient = Get-Recipient -Filter "ExternalEmailAddress -eq '$($line.ExternalEmailAddress)'" -DomainController $dc -ErrorAction SilentlyContinue if ($existingRecipient) { # 已存在则打日志后直接跳过 "$($line.Name) 对应的外部邮箱地址 $($line.ExternalEmailAddress) 已存在,跳过创建操作" | Out-File $logfile -Append continue } # 不存在则执行创建和配置操作 New-MailContact -DomainController $dc -Name $line.Name -ExternalEmailAddress $line.ExternalEmailAddress -OrganizationalUnit $OU -ErrorAction Stop Set-Contact -DomainController $dc -Identity $line.Name -Department $line.Department -Title "Sales Team" -StreetAddress $line.StreetAddress -City $line.City -StateOrProvince $line.StateOrProvince -PostalCode $line.PostalCode -Office $line.Office -CountryOrRegion $line.CountryOrRegion "$($line.Name) 创建成功" | Out-File $logfile -Append } catch { $message = "创建联系人 $($line.Name) 时出现问题" $message | Out-File $logfile -Append Write-Warning $message Write-Warning $_.Exception.Message $_.Exception.Message | Out-File $logfile -Append } } }
注意事项
- 校验时指定了和创建操作相同的域控制器,避免跨域控同步延迟导致的误判
- 过滤条件严格匹配外部邮箱地址,不会受联系人名称重复的影响
- 新增了已存在场景的日志记录,方便后续核查处理结果
内容的提问来源于stack exchange,提问作者user3911968
相关产品推荐
相关产品推荐

