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

使用PowerShell更新Office 365属性并创建新账号报错如何解决

问题背景

我正在编写一款PowerShell脚本,用于实现以下功能:

  • 登录我方O365实例
  • 读取CSV文件并更新用户属性(如部门、职位)
  • 若未查询到对应用户,则使用CSV内的属性创建新账号

当我注释掉New-AzureADUser相关代码段时,脚本可正常运行,能顺利更新已存在用户的属性;但当我调用New-AzureADUser时,会返回如下报错信息:

New-AzureADUser : Cannot convert 'System.Object[]' to the type 'System.String' required by parameter 'DisplayName'. Specified method is not supported.

我知道该报错的含义是入参需要字符串类型而非对象类型,但不清楚下一步该如何调整代码解决问题,我当前使用的脚本代码如下:

# Connect to AzureAD
Connect-AzureAD

# Get CSV content
$CSVrecords = Import-Csv bra_o365_import1.csv -Delimiter ","
#CSV contains UserPrincipalName,Department,DisplayName,FirstName,LastName,Title

# Loop trough CSV records
foreach ($CSVrecord in $CSVrecords) {
    $upn = $CSVrecord.UserPrincipalName
    $user = Get-AzureADUser -Filter "userPrincipalName eq '$upn'"  
    if ($user) {
        try{
        $user | Set-AzureADUser -Department $CSVrecord.Department -JobTitle $CSVrecord.Title
        } catch {
        
        Write-Warning "$upn user found, but FAILED to update."
        }
    }
    else {

    New-AzureADUser -DisplayName $CSVrecords.DisplayName -UserPrincipalName $CSVrecords.UserPrincipalName -AccountEnabled $true -Department $CSVrecord.Department -JobTitle $CSVrecord.Title

    Write-Host  $CSVrecords.DisplayName
     
    }
}
问题原因

代码存在变量名写错的低级错误:你在foreach循环里遍历的单条记录变量是$CSVrecord,但是调用New-AzureADUser和Write-Host的时候,用的是存储全部CSV内容的数组变量$CSVrecords,把整个数组传给了需要单个字符串的DisplayName参数,自然就会报类型不匹配的错误。

另外你当前的创建用户代码还缺少PasswordProfile、MailNickname两个必填参数,就算修复变量名问题,运行后依然会报错。

修复后的完整代码
# 连接AzureAD
Connect-AzureAD

# 读取CSV内容
$CSVrecords = Import-Csv bra_o365_import1.csv -Delimiter ","
# CSV字段包含:UserPrincipalName,Department,DisplayName,FirstName,LastName,Title

# 遍历CSV每一行记录
foreach ($CSVrecord in $CSVrecords) {
    $upn = $CSVrecord.UserPrincipalName
    $user = Get-AzureADUser -Filter "userPrincipalName eq '$upn'"  
    if ($user) {
        try{
            $user | Set-AzureADUser -Department $CSVrecord.Department -JobTitle $CSVrecord.Title
        } catch {
            Write-Warning "$upn 用户已找到,但更新失败。"
        }
    }
    else {
        # 构造密码配置,可根据实际需求调整密码规则和是否强制下次登录改密码
        $PasswordProfile = New-Object -TypeName Microsoft.Open.AzureAD.Model.PasswordProfile
        $PasswordProfile.Password = "这里替换为你设置的初始默认密码"
        $PasswordProfile.ForceChangePasswordNextLogin = $true
        
        # 修复变量名,补全必填参数
        New-AzureADUser -DisplayName $CSVrecord.DisplayName `
        -UserPrincipalName $CSVrecord.UserPrincipalName `
        -AccountEnabled $true `
        -Department $CSVrecord.Department `
        -JobTitle $CSVrecord.Title `
        -PasswordProfile $PasswordProfile `
        -MailNickname $CSVrecord.DisplayName `
        -GivenName $CSVrecord.FirstName `
        -Surname $CSVrecord.LastName

        Write-Host  "已创建新用户:$($CSVrecord.DisplayName)"
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 20:45:06