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

使用PowerShell检索目录中访问包及资源时遇到问题求助

解决特定目录下访问包枚举及资源收集问题

原代码的问题点

  • Connect-MgGraph的作用域字符串未闭合,存在语法错误
  • 先拉取所有访问包再过滤的方式效率低,且当访问包数量较多时可能因分页遗漏结果
  • 未处理$catalogId为空的情况(比如目录名称不匹配、无权限访问目录),会导致后续过滤失效

修正后的访问包枚举代码

# 连接Microsoft Graph,修正作用域引号问题
Connect-MgGraph -Scopes "EntitlementManagement.ReadWrite.All"

# 定义目标目录名称
$catalogName = "Test"

# 获取目录ID,添加大小写不敏感匹配,并处理未找到的情况
$catalog = Get-MgEntitlementManagementCatalog | Where-Object { $_.DisplayName -eq $catalogName }
if (-not $catalog) {
    Write-Error "未找到名称为 $catalogName 的权限管理目录"
    exit
}
$catalogId = $catalog.Id

# 直接通过CatalogId过滤访问包,避免全量拉取
$filteredAccessPackages = Get-MgEntitlementManagementAccessPackage -Filter "catalogId eq '$catalogId'"

# 输出访问包信息
$filteredAccessPackages | Format-Table Id, DisplayName, Description -AutoSize

收集访问包关联的资源

如果需要获取每个访问包中使用的资源,可以遍历访问包,查询其资源角色分配:

foreach ($pkg in $filteredAccessPackages) {
    Write-Host "`n访问包: $($pkg.DisplayName) (ID: $($pkg.Id))" -ForegroundColor Cyan
    # 获取访问包的资源角色分配
    $resourceRoles = Get-MgEntitlementManagementAccessPackageResourceRole -AccessPackageId $pkg.Id
    foreach ($role in $resourceRoles) {
        # 获取对应的资源详情
        $resource = Get-MgEntitlementManagementAccessPackageResource -AccessPackageResourceId $role.AccessPackageResourceId
        Write-Host "资源名称: $($resource.DisplayName) | 角色: $($role.DisplayName)"
    }
}

额外注意事项

  • 确保当前账号拥有EntitlementManagement.ReadWrite.All或至少EntitlementManagement.Read.All权限
  • 如果目录存在重名情况,建议直接使用目录ID代替名称,避免匹配错误
  • 当访问包或资源数量较多时,可添加-All参数确保获取全量结果(如Get-MgEntitlementManagementAccessPackage -Filter "catalogId eq '$catalogId'" -All)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 06:34:59