通过CSV批量填充Azure AD用户属性时提示属性不存在如何解决
问题根因
你的代码存在4个核心逻辑错误,直接导致属性找不到、赋值失败:
- 循环逻辑混乱:
Import-Csv后接ForEach-Object时,循环内的当前行数据需要用内置变量$_调用,你反复调用整个$Csv集合会返回所有行的数组,不是单条用户数据 - 变量未初始化就赋值:你没有提前声明
$User对象,直接给$User.ObjectID赋值会触发属性不存在报错 - 取值方式错误:用
Select ObjectID返回的是带有ObjectID属性的自定义对象,不是属性本身的字符串值,传入命令后会识别失败 - 参数名不匹配:
Set-AzureADUser没有和你CSV列名对应的-Property2、-Property3参数,参数名必须是Azure AD用户属性对应的官方参数名,自定义属性需要用专门的ExtensionProperty参数传入
修正后可运行代码
Connect-AzureAD # 先导入CSV到变量,再逐行处理 $userCsv = Import-Csv -Path "C:\1\2\3\4\Example.Csv" foreach ($row in $userCsv) { # 注意:请把-GivenName、-Surname替换为你实际要修改的属性对应的官方参数名 # 官方参数名可以执行 Get-Command Set-AzureADUser -Syntax 查看 Set-AzureADUser -ObjectId $row.ObjectID ` -GivenName $row.Property2 ` -Surname $row.Property3 }
自定义属性适配方案
如果你要修改的是Azure AD的自定义扩展属性,不能直接写属性名作为参数,需要按如下格式传入:
Set-AzureADUser -ObjectId $row.ObjectID -ExtensionProperty @{ "extension_<你的应用ID(去掉横杠)>_Property2" = $row.Property2 "extension_<你的应用ID(去掉横杠)>_Property3" = $row.Property3 }
可以先执行Get-AzureADUserExtension -ObjectId <测试用户ObjectID>查看你环境里的自定义属性完整命名格式,再替换到代码中。
建议全量执行前,先拿单条测试数据加-WhatIf参数验证修改效果,确认无误后再批量运行。
内容的提问来源于stack exchange,提问作者BPengu
相关产品推荐
相关产品推荐

