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

如何根据Office 365许可证状态为CSV列设置对应值?

解决Office 365许可证状态批量查询并更新CSV的问题

嗨!很高兴帮你搞定这个需求~ 首先得确认你已经准备好Microsoft Graph PowerShell模块(现在微软推荐用这个替代旧的MSOnline模块来管理365服务),下面是一步步的实现方案:

1. 先安装并连接到Microsoft Graph

首先打开PowerShell(建议以管理员身份运行),执行以下命令:

# 安装Microsoft Graph模块(第一次运行需要)
Install-Module Microsoft.Graph -Force -AllowClobber

# 连接到Graph,需要用户读取和组织权限
Connect-MgGraph -Scopes User.Read.All, Organization.Read.All

连接的时候会弹出登录窗口,用你的Office 365管理员账号登录即可。

2. 完整的CSV处理代码

你可以把下面的代码和你已有的开头结合,记得根据实际的许可证名称修改$license1Name和$license2Name:

# 导入原始CSV文件
$users = Import-Csv .\users.csv

# 定义需要检查的许可证名称(替换成你实际要查的许可证)
$license1Name = "Microsoft 365 E3"
$license2Name = "Microsoft Teams Phone Standard"

# 遍历每个用户,查询许可证状态
foreach ($user in $users) {
    # 获取用户的许可证详情,忽略不存在的用户错误
    $userLicenses = Get-MgUserLicenseDetail -UserId $user.Username -ErrorAction SilentlyContinue

    # 处理License1状态:先把许可证名称转成无空格的SkuPartNumber格式,再匹配
    $license1Sku = $license1Name -replace " ", ""
    $user.License1 = if ($userLicenses.SkuPartNumber -contains $license1Sku) { "已分配" } else { "未分配" }

    # 处理License2状态
    $license2Sku = $license2Name -replace " ", ""
    $user.License2 = if ($userLicenses.SkuPartNumber -contains $license2Sku) { "已分配" } else { "未分配" }

    # 可选:如果用户不存在,标记状态
    if (-not $userLicenses) {
        $user.License1 = "用户不存在"
        $user.License2 = "用户不存在"
    }
}

# 将更新后的数据导出到新CSV(避免覆盖原文件)
$users | Export-Csv .\updated_users.csv -NoTypeInformation -Encoding UTF8

3. 关键注意事项

  • 许可证SkuPartNumber确认:如果不确定你的许可证对应的SkuPartNumber,可以运行Get-MgSubscribedSku查看所有可用的许可证信息,找到对应名称的SkuPartNumber字段(比如"Microsoft 365 E3"对应O365E3)。
  • 权限问题:确保你的账号有足够的权限读取用户和许可证信息,否则会出现访问被拒绝的错误。
  • 编码问题:导出CSV时用-Encoding UTF8可以避免中文乱码的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:24:14