使用New-MsolUser创建用户时遇未知错误,求解决方案
解决New-MsolUser创建用户时的OperationNotAllowedException错误
问题重现
使用以下MSOnline PowerShell脚本创建用户:
$Uppn = "XXX@ms.XX.XX" $UserID = "00000" $DisName = "XXX XXXX " $FirstNm = "XXXX " $LastNm = "XXXX " $AltEmail = "xxxxxxx@xx.xx.xx.x" $Mobilenum = "+11111111111" New-MsolUser -UserPrincipalName $Uppn -ImmutableId $UserID -DisplayName $DisName -FirstName $FirstNm -LastName $LastNm -AlternateEmailAddresses $AltEmail -LicenseAssignment "aaa:STANDARDWOFFPACK_STUDENT" -UsageLocation "LK" -MobilePhone $Mobilenum
执行后触发错误:
New-MsolUser : Unknown error occurred. At line:1 char:1 + New-MsolUser -UserPrincipalName $Uppn -ImmutableId $UserID -DisplayNa ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : OperationStopped: (:) [New-MsolUser], MicrosoftOnlineException + FullyQualifiedErrorId : Microsoft.Online.Administration.Automation.OperationNotAllowedException,Microsoft.Online.Administration.Automation.NewUser
解决方案
1. 拆分许可证分配步骤
部分场景下,创建用户时直接分配许可证会触发验证异常,可拆分操作:
- 先创建不带许可证的用户:
New-MsolUser -UserPrincipalName $Uppn -ImmutableId $UserID -DisplayName $DisName -FirstName $FirstNm -LastName $LastNm -AlternateEmailAddresses $AltEmail -UsageLocation "LK" -MobilePhone $Mobilenum - 用户创建成功后,单独分配许可证:
Set-MsolUserLicense -UserPrincipalName $Uppn -AddLicenses "aaa:STANDARDWOFFPACK_STUDENT" - 同时用
Get-MsolAccountSku确认该许可证有剩余配额,且UsageLocation是有效的ISO 3166-1 alpha-2代码(LK为斯里兰卡,符合要求)。
2. 修正ImmutableId格式
ImmutableId用于联合身份场景,必须是Base64编码字符串,不能是纯数字:
- 如果是非联合身份用户,直接移除
-ImmutableId参数重试。 - 如果需要联合身份,将用户ID转换为Base64格式:
$UserID = "00000" $ImmutableId = [Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes($UserID))
3. 清理用户属性的无效内容
- 移除属性值末尾的空格:示例中
$DisName、$FirstNm、$LastNm都有 trailing space,修改为:$DisName = "XXX XXXX" $FirstNm = "XXXX" $LastNm = "XXXX" - 确保
AlternateEmailAddresses是标准邮箱格式,示例中的xxxxxxx@xx.xx.xx.x不符合规则,需调整为合法邮箱。
4. 验证账号权限与租户限制
- 确认执行脚本的账号拥有全局管理员或用户管理员角色,受限角色无法创建用户。
- 检查租户是否设置了用户创建数量限制,或禁止PowerShell创建用户的策略。
5. 改用Microsoft Graph PowerShell重试
MSOnline模块已逐步淘汰,推荐使用Microsoft Graph PowerShell:
# 安装模块(首次使用) Install-Module Microsoft.Graph.Users -Force # 授权连接 Connect-MgGraph -Scopes "User.ReadWrite.All","Directory.ReadWrite.All" # 创建用户 $params = @{ AccountEnabled = $true DisplayName = "XXX XXXX" MailNickname = "XXX" UserPrincipalName = "XXX@ms.XX.XX" PasswordProfile = @{ ForceChangePasswordNextSignIn = $false Password = "TempPass123!" # 需符合租户密码策略 } GivenName = "XXXX" Surname = "XXXX" AlternateEmailAddresses = @("xxxxxxx@xx.xx.xx") MobilePhone = "+11111111111" UsageLocation = "LK" } New-MgUser @params # 分配许可证 $skuId = (Get-MgSubscribedSku | Where-Object SkuPartNumber -eq "STANDARDWOFFPACK_STUDENT").SkuId Set-MgUserLicense -UserId "XXX@ms.XX.XX" -AddLicenses @(@{SkuId = $skuId}) -RemoveLicenses @()
内容的提问来源于stack exchange,提问作者Tuwan J
相关产品推荐
相关产品推荐

