请求提供查找应用权限及Azure应用Mail.*应用权限的PowerShell脚本
查找拥有Mail类应用权限的Azure应用脚本
问题解答
- 存在可查找Azure应用权限的脚本,以下直接提供符合需求的PowerShell实现。
PowerShell脚本实现
# 连接Azure AD模块(需提前安装AzureAD或AzureADPreview模块) Connect-AzureAD # 获取所有Azure AD应用注册 $allApps = Get-AzureADApplication -All $true # 筛选目标应用:拥有至少一个Application类型的Mail.*权限,排除仅拥有委托类型Mail.*权限的应用 $targetApps = $allApps | Where-Object { # 提取应用的所有权限项 $allPermissions = $_.RequiredResourceAccess | ForEach-Object { $_.ResourceAccess } # 筛选出Microsoft Graph下的Mail相关权限(资源ID固定为00000003-0000-0000-c000-000000000000) $mailRelatedPerms = $allPermissions | Where-Object { $_.Id -match "00000003-0000-0000-c000-000000000000" -and $_.Type -in ("Application", "Scope") } if ($mailRelatedPerms) { # 检查是否存在应用级权限(Application类型) $hasAppLevelMailPerm = $mailRelatedPerms | Where-Object { $_.Type -eq "Application" } # 仅保留有应用级权限、且不是只有委托权限的应用 return $hasAppLevelMailPerm -and (-not (-not $hasAppLevelMailPerm)) } return $false } # 格式化输出结果 $targetApps | ForEach-Object { $appName = $_.DisplayName $appId = $_.AppId # 提取该应用的应用级Mail权限详情 $appMailPerms = $_.RequiredResourceAccess | ForEach-Object { $_.ResourceAccess | Where-Object { $_.Type -eq "Application" -and $_.Id -match "00000003-0000-0000-c000-000000000000" } } # 权限ID与可读名称映射(可按需补充更多) $permNameMap = @{ "df021288-bdef-4463-88db-98f22de89214" = "Mail.Read" "37f7f235-527c-4136-accd-4a02d197296e" = "Mail.ReadWrite" "dc890d15-9560-4a4c-9b7f-a736ec74ec40" = "Mail.Send" } $readablePerms = $appMailPerms | ForEach-Object { $permNameMap[$_.Id] ?? $_.Id } Write-Host "应用名称: $appName" Write-Host "应用ID: $appId" Write-Host "拥有的Mail类应用权限: $($readablePerms -join ', ')" Write-Host "-------------------------" }
脚本说明
- 需提前安装Azure AD模块:执行
Install-Module -Name AzureAD(需管理员权限)。 - 通过Microsoft Graph的固定资源ID筛选Mail类权限,确保范围准确。
- 严格区分应用权限(
Application类型)和委托权限(Scope类型),精准排除仅拥有委托权限的应用。 - 权限名称映射部分可根据需要补充更多Mail类应用权限,让输出更直观。
内容的提问来源于stack exchange,提问作者Lee
相关产品推荐
相关产品推荐

