PowerShell执行New-MsolUser批量创建用户时报位置参数错误
错误产生原因
- 核心触发原因是PowerShell属性访问语法错误:你引用的输入对象属性名包含空格(如
Display name、First name),但未给带空格的属性名加合法包裹,PowerShell解析时会将空格后的name识别为传给New-MsolUser的独立位置参数,而该命令不存在可接收name值的无命名位置参数,直接触发参数绑定异常。 - 额外逻辑偏差:你使用的
New-MsolUser是MSOnline模块下的Azure AD/Microsoft 365云端用户创建命令,和描述里「新增Windows本地用户组」的需求不匹配,操作本地用户/组需要调用Windows本地系统对应的命令集。
修复方案
- 修正属性访问语法:所有带空格的属性名,访问时必须在属性名外侧加双引号,写作
$_."属性名"格式。 - 对齐属性名拼写:你脚本中写的
officeaddresss多了1个尾缀s,需要和输入源的实际属性名完全一致。 - (推荐)从根源规避空格问题:如果用户数据来自CSV导入,导入阶段直接替换表头空格,后续无需处理带空格的属性名。
- 若实际需求为操作本地用户组,替换为本地系统对应命令即可。
修正后代码
保留原有带空格属性名的写法
$user | ForEach-Object { New-MsolUser ` -DisplayName $_."Display name" ` -FirstName $_."First name" ` -LastName $_."Last name" ` -UserPrincipalName $_."User principal name" ` -LicenseAssignment $_."Licenses" ` -Password "WXAqa@123" ` -Office $_."officeaddress" ` -MobilePhone $_."Phone number" ` -UsageLocation "IN" }
提前处理属性名空格的推荐写法
# 导入CSV时自动清除表头空格,避免后续语法错误 $user = Import-Csv -Path "你的用户数据文件路径.csv" | ForEach-Object { $processedObj = New-Object PSObject $_.PSObject.Properties | ForEach-Object { $processedObj | Add-Member -NotePropertyName $_.Name.Replace(' ','') -NotePropertyValue $_.Value } $processedObj } # 后续可直接用无空格属性名调用命令 $user | ForEach-Object { New-MsolUser ` -DisplayName $_.Displayname ` -FirstName $_.Firstname ` -LastName $_.Lastname ` -UserPrincipalName $_.Userprincipalname ` -LicenseAssignment $_.Licenses ` -Password "WXAqa@123" ` -Office $_.officeaddress ` -MobilePhone $_.Phonenumber ` -UsageLocation "IN" }
补充说明
- 调用
New-MsolUser前需要先执行Connect-MsolService登录对应Microsoft 365/Azure AD租户账号,否则会触发权限错误。 - 如果你的实际需求是创建Windows本地用户组,使用以下本地命令即可,无需调用MSOnline模块:
# 创建本地用户组示例 New-LocalGroup -Name "目标用户组名" -Description "用户组描述信息"
内容的提问来源于stack exchange,提问作者abhiya
相关产品推荐
相关产品推荐

