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

Microsoft Graph PowerShell无法为用户添加许可证问题求助

解决Set-MgUserLicense的AddLicenses参数格式错误问题

我来帮你搞定这个问题——你遇到的错误核心是**-AddLicenses参数需要的是IMicrosoftGraphAssignedLicense对象数组,不是单纯的字符串**,Graph PowerShell和MSOnline的许可证参数格式差异很大,下面是具体的解决步骤和示例:

1. 先获取目标许可证的SKU GUID(关键!)

Graph PowerShell里的SkuId是GUID格式,不是MSOnline里的AccountSkuId(比如reseller-account:ENTERPRISEPACK)。你需要先通过Get-MgSubscribedSku命令获取对应SKU的GUID:

# 获取所有订阅SKU,筛选你需要的信息
Get-MgSubscribedSku | Select-Object AccountSkuId, SkuPartNumber, SkuId

执行后会输出类似这样的结果(找到reseller-account:ENTERPRISEPACK对应的SkuId值,比如12345678-1234-1234-1234-1234567890ab):

AccountSkuId                  SkuPartNumber SkuId
------------                  ------------- -----
reseller-account:ENTERPRISEPACK ENTERPRISEPACK 12345678-1234-1234-1234-1234567890ab
reseller-account:FLOW_FREE     FLOW_FREE     87654321-4321-4321-4321-ba0987654321
...

2. 构造正确的AddLicenses参数

-AddLicenses需要传入包含SkuId的哈希表数组(PowerShell会自动将哈希表转换为IMicrosoftGraphAssignedLicense对象):

# 替换成你找到的ENTERPRISEPACK对应的GUID
$targetSkuId = "12345678-1234-1234-1234-1234567890ab"

# 构造要添加的许可证数组
$addLicenses = @(
    @{
        SkuId = $targetSkuId
        # 如果需要禁用该许可证下的特定服务计划,可以添加DisabledPlans属性,比如:
        # DisabledPlans = @("服务计划GUID1", "服务计划GUID2")
    }
)

3. 执行Set-MgUserLicense命令

现在用构造好的参数执行命令:

Set-MgUserLicense -UserId "testuser@testuser.com" -AddLicenses $addLicenses -RemoveLicenses @()

为什么你之前的写法不对?

你尝试的[SkuId:reseller-account:ENTERPRISEPACK]、reseller-account:ENTERPRISEPACK都是字符串格式,但-AddLicenses参数要求的是IMicrosoftGraphAssignedLicense[]类型(对象数组),所以PowerShell无法将字符串转换为所需的对象,才会抛出转换错误。

另外,MSOnline模块确实只支持Windows PowerShell,无法在Linux的PowerShell Core中运行,所以改用Graph PowerShell是正确的选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 20:07:36