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

PowerShell中Graph API获取指定组用户及经理信息的优化方法

PowerShell + Microsoft Graph API 脚本优化方案

需求说明

你需要通过Microsoft Graph API获取符合条件的用户(示例中是DisplayName以Joe Bloggs开头),导出Get-MgUser的所有字段,同时在结果末尾追加用户的经理信息、用户所属含VIP关键词的组信息,最终输出为CSV文件。

原脚本存在的问题

  1. 变量错误:循环中使用未定义的$CurrentID,实际应引用循环变量$Id.Id
  2. 手动拼接CSV字符串:容易出现格式错误(比如字段含逗号时会乱序),且无法保留Get-MgUser的所有字段
  3. API请求冗余:逐个用户调用Get-MgUserMemberOf和Get-MgUserManager,未利用Graph的$expand参数减少请求次数
  4. Graph连接方式繁琐:手动请求token,可直接使用Microsoft Graph模块的内置认证方式

优化后的脚本

# 检查Microsoft Graph模块是否已安装
if (Get-InstalledModule Microsoft.Graph -ErrorAction SilentlyContinue) {
    # 配置认证参数
    $appId = 'BLAH'
    $tenantId = 'BLAH'
    $secret = ConvertTo-SecureString 'BLAH' -AsPlainText -Force
    $credential = New-Object System.Management.Automation.PSCredential ($appId, $secret)

    # 连接Microsoft Graph(使用客户端凭证流)
    Connect-MgGraph -ClientCredential $credential -TenantId $tenantId
    # 若使用正式环境,注释下方beta版本选择
    Select-MgProfile -Name 'beta'

    # 获取用户,同时展开经理信息(减少单独调用Get-MgUserManager的次数)
    $users = Get-MgUser -Filter "startsWith(DisplayName, 'Joe Bloggs')" -ExpandProperty manager

    # 初始化结果数组
    $results = @()

    foreach ($user in $users) {
        # 获取用户所属的VIP组
        $vipGroups = Get-MgUserMemberOf -UserId $user.Id | 
            Where-Object { $_.AdditionalProperties['displayName'] -like '*VIP*' } |
            Select-Object -ExpandProperty AdditionalProperties -Property displayName

        # 处理多组情况,用逗号分隔组名
        $vipGroupNames = $vipGroups.displayName -join ', '

        # 处理经理信息:如果有经理则取显示名,否则显示"N/A"
        $managerName = if ($user.Manager) { $user.Manager.AdditionalProperties['displayName'] } else { "N/A" }

        # 将用户所有字段转换为自定义对象,追加经理和组信息
        $userObj = $user | Select-Object *, 
            @{Name='经理姓名'; Expression={$managerName}},
            @{Name='所属VIP组'; Expression={$vipGroupNames}}

        $results += $userObj
    }

    # 导出到CSV(-NoTypeInformation避免添加类型头)
    $results | Export-Csv -Path 'C:\Temp\Result.csv' -NoTypeInformation -Encoding UTF8
}
else {
    Write-Host "请先安装Microsoft Graph模块:Install-Module Microsoft.Graph -Scope CurrentUser -Force"
}

核心优化点

  • 简化认证流程:使用Connect-MgGraph -ClientCredential直接完成客户端凭证认证,无需手动请求token,代码更简洁可靠
  • 减少API请求:获取用户时通过-ExpandProperty manager直接拉取经理信息,避免逐个用户调用Get-MgUserManager
  • 保留所有用户字段:通过Select-Object *保留Get-MgUser返回的全部字段,再追加自定义的经理和组字段
  • CSV生成更规范:用Export-Csv替代手动拼接字符串,自动处理特殊字符(如逗号、引号),保证CSV格式正确
  • 容错处理:添加经理不存在时的默认值,处理用户属于多个VIP组的场景
  • 变量修正:修正原脚本中$CurrentID的未定义错误,使用正确的循环变量$user.Id

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 07:55:18