You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell批量创建邮件联系人报错:ExternalEmailAddress无法转换ArrayList

问题描述

我的目标

使用PowerShell批量创建邮件联系人。手动输入ExternalEmailAddress时程序可正常运行,但因需创建的邮件联系人数目庞大,无法手动操作。不清楚问题出在哪里,恳请帮忙排查!

我的代码

$UserCredential = Get-Credential
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://xxx.yyy.com/PowerShell/ -Authentication Kerberos -Credential $UserCredential
Import-PSSession $Session -DisableNameChecking
Import-Module ActiveDirectory
$User = Import-CSV C:\CREATE-MAIL-CONTACT.csv
$Params = @{
    Name = $user.Name
    ExternalEmailAddress = $User.PrimarySmtpAddress
    OrganizationalUnit = "OU=Mail Contacts,DC=xxx,DC=com"
  }
New-MailContact @Params

CSV内容

Displayname Name        PrimarySmtpAddress
John Smith  John Smith  john.smith@abc.com

错误信息

执行时出现错误:ExternalEmailAddress can not convert the system.collection.arraylist


解决方案

问题根源是Import-CSV返回的是包含所有行的集合(ArrayList),你直接通过$User.Name和$User.PrimarySmtpAddress传递参数时,会把整个集合的所有值传给New-MailContact,但该命令需要单个对象的属性值,所以报错。

修改代码,添加循环遍历每个用户对象:

$UserCredential = Get-Credential
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://xxx.yyy.com/PowerShell/ -Authentication Kerberos -Credential $UserCredential
Import-PSSession $Session -DisableNameChecking
Import-Module ActiveDirectory

# 遍历CSV中的每一条用户记录
foreach ($user in Import-CSV C:\CREATE-MAIL-CONTACT.csv) {
    $Params = @{
        Name = $user.Name
        ExternalEmailAddress = $user.PrimarySmtpAddress
        OrganizationalUnit = "OU=Mail Contacts,DC=xxx,DC=com"
    }
    New-MailContact @Params
}

可选优化:添加错误处理

如果需要排查单个联系人创建失败的原因,可以加入try/catch捕获异常:

$UserCredential = Get-Credential
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://xxx.yyy.com/PowerShell/ -Authentication Kerberos -Credential $UserCredential
Import-PSSession $Session -DisableNameChecking
Import-Module ActiveDirectory

foreach ($user in Import-CSV C:\CREATE-MAIL-CONTACT.csv) {
    try {
        $Params = @{
            Name = $user.Name
            ExternalEmailAddress = $user.PrimarySmtpAddress
            OrganizationalUnit = "OU=Mail Contacts,DC=xxx,DC=com"
        }
        New-MailContact @Params -ErrorAction Stop
        Write-Host "联系人 [$($user.Name)] 创建成功"
    }
    catch {
        Write-Host "联系人 [$($user.Name)] 创建失败:$($_.Exception.Message)" -ForegroundColor Red
    }
}

内容的提问来源于stack exchange,提问作者user270488

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 11:03:27