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

修改PowerShell脚本实现Microsoft Graph用户去重及SKU列添加

解决Microsoft Graph PowerShell脚本的用户去重与动态SKU列需求

以下是修改后的PowerShell脚本,已实现用户去重和动态添加SKU布尔列的功能:

Connect-MgGraph -Scopes "User.Read.All","Group.ReadWrite.All" -NoWelcome

# 获取目标SKU并构建SkuId与SkuPartNumber的映射表
$targetSkus = Get-MgSubscribedSku -All | Where-Object { $_.SkuPartNumber -in ('SKU1', 'SKU2', 'SKU3', 'SKU4', 'SKU5') }
$skuMap = @{}
$targetSkus | ForEach-Object { $skuMap[$_.SkuId] = $_.SkuPartNumber }

# 收集所有拥有目标SKU的用户并去重(用哈希表确保每个用户仅出现一次)
$uniqueUsers = @{}
foreach ($sku in $targetSkus) {
    $usersWithSku = Get-MgUser -Filter "assignedLicenses/any(x: x/skuId eq $($sku.SkuId))" `
                               -Select 'DisplayName', 'Id', 'Mail', 'UserPrincipalName', 'JobTitle', 'AssignedLicenses' `
                               -All $true
    foreach ($user in $usersWithSku) {
        if (-not $uniqueUsers.ContainsKey($user.Id)) {
            $uniqueUsers[$user.Id] = $user
        }
    }
}

# 生成包含动态SKU布尔列的结果集
$result = foreach ($user in $uniqueUsers.Values) {
    # 初始化基础属性
    $outObject = [ordered]@{
        Id                = $user.Id
        DisplayName       = $user.DisplayName
        UserPrincipalName = $user.UserPrincipalName
        Mail              = $user.Mail
        JobTitle          = $user.JobTitle
    }

    # 为每个目标SKU添加布尔列
    foreach ($skuId in $skuMap.Keys) {
        $skuName = $skuMap[$skuId]
        $hasSku = $user.AssignedLicenses.SkuId -contains $skuId
        $outObject[$skuName] = $hasSku
    }

    [pscustomobject]$outObject
}

Write-Host "Found $($uniqueUsers.Count) unique licensed users."
$result

关键改动说明:

  1. 用户去重实现:

    • 使用哈希表$uniqueUsers,以用户Id作为唯一键,遍历每个SKU的用户列表时,仅添加未出现过的用户,从根源避免重复。
    • 相比事后用Select-Object -Unique,哈希表去重效率更高,尤其在用户量较大时更明显。
  2. 动态SKU布尔列实现:

    • 先构建$skuMap存储SKU ID与名称的对应关系,方便后续快速匹配。
    • 在生成结果对象时,遍历所有目标SKU,检查当前用户的AssignedLicenses中是否包含该SKU ID,动态添加以SKU名称为列名的布尔属性(True表示拥有,False表示未拥有)。
    • 当目标SKU列表修改时(比如新增或删除SKU),只需修改Where-Object中的SkuPartNumber列表,脚本会自动适配列的数量,无需手动调整后续逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 15:43:40