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

PowerShell配置Office365许可证提示无效的问题咨询

问题原因
  • 你的CSV文件结构与表头不匹配:表头仅定义了Users、Licence两列,但每一行实际包含3个字段,导入PowerShell后第二个许可证会被合并为Licence列的字符串内容,不会单独成为可识别的许可证值。
  • 数据类型不匹配:Set-MsolUserLicense的-AddLicenses参数要求传入字符串数组,你从CSV读取到的Licence值是单个字符串类型(包含逗号、引号的长文本),不符合参数要求,因此触发许可证无效报错。
解决方案

方案一:修正CSV格式后批量处理(推荐)

  1. 重新导出CSV,将同一用户的多个许可证用分号分隔,存入同一列,调整后CSV格式如下:
Users,Licences
toto@mycompany.com,MYCOMPANY:LICENCEXXX;MYCOMPANY:LICENCEVISIO
titi@mycompany.com,MYCOMPANY:LICENCEXXX;MYCOMPANY:LICENCEWORD
tata@mycompany.com,MYCOMPANY:LICENCEXXX;MYCOMPANY:LICENCEEXCEL
  1. 使用以下脚本完成批量分配:
$csv = Import-Csv C:\output.csv
foreach ($row in $csv) {
    # 将分号分隔的字符串拆分为许可证数组
    $licArray = $row.Licences -split ';'
    Set-MsolUserLicense -UserPrincipalName $row.Users -AddLicenses $licArray
}

方案二:直接兼容现有CSV格式

如果不想重新生成CSV,可以直接读取原始文本拆分处理:

# 跳过表头行读取所有内容
$rawLines = Get-Content C:\output.csv | Select-Object -Skip 1
foreach ($line in $rawLines) {
    # 移除所有引号,按逗号拆分字段
    $fields = $line -replace '"', '' -split ','
    $upn = $fields[0]
    # 取第一个字段之后的所有内容作为许可证数组
    $licArray = $fields[1..($fields.Count - 1)]
    Set-MsolUserLicense -UserPrincipalName $upn -AddLicenses $licArray
}
验证方法

你可以执行以下代码对比硬编码变量和CSV读取变量的差异,确认问题根因:

# 硬编码的合法许可证变量
$hardCodeLic = "MYCOMPANY:LICENCEXXX","MYCOMPANY:LICENCEWORD"
Write-Host "硬编码变量类型:$($hardCodeLic.GetType().Name),元素数量:$($hardCodeLic.Count)"

# 从CSV读取的变量
$csvLic = $csv[1].Licence
Write-Host "CSV读取变量类型:$($csvLic.GetType().Name),值:$csvLic"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 16:06:07