如何通过PowerShell在Azure Function中获取AAD所有用户
在Azure Function中用PowerShell获取AAD所有用户的解决方案
1. 配置Function App的身份与权限
- 给你的Azure Function App启用系统分配托管身份:
- 进入Azure Portal的Function App页面 → 左侧菜单选择「身份」
- 切换到「系统分配」标签,开启状态后保存
- 添加Microsoft Graph应用权限:
- 在Function App左侧菜单选择「API权限」→ 点击「添加权限」
- 选择「Microsoft Graph」→ 「应用权限」
- 搜索并勾选
Directory.Read.All权限,点击「添加权限」 - 点击「授予管理员同意」(需要全局管理员或权限管理员权限)
2. 部署Microsoft Graph模块到Function环境
Azure Function的PowerShell环境默认没有Microsoft Graph模块,有两种安装方式:
- 方式一:通过Kudu工具安装
- 进入Function App的「高级工具」→ 点击「Go」进入Kudu控制台
- 切换到「PowerShell」终端,执行命令:
Install-Module Microsoft.Graph -Scope CurrentUser -Force -AllowClobber
- 方式二:通过requirements.psd1自动安装
在Function的根目录创建requirements.psd1文件,内容如下:
部署Function时,Azure会自动安装该文件中指定的模块。@{ 'Microsoft.Graph' = '2.0.0' # 可指定合适的版本号 }
3. 编写PowerShell Function代码
以下是Http触发的示例代码,支持分页获取所有用户:
using namespace System.Net param($Request, $TriggerMetadata) # 借助托管身份连接Microsoft Graph Connect-MgGraph -Identity # 获取所有AAD用户,指定需要的属性 $allUsers = Get-MgUser -All $true -Property Id, DisplayName, UserPrincipalName, Mail, AccountEnabled # 构造响应内容 $responseBody = $allUsers | ConvertTo-Json -Depth 10 Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{ StatusCode = [HttpStatusCode]::OK Body = $responseBody })
4. 常见问题排查
- 权限不足错误:确认已添加
Directory.Read.All应用权限,且完成了管理员同意;不要使用委派权限,因为Function是后台运行,没有用户交互 - 模块找不到错误:通过Kudu控制台执行
Get-Module Microsoft.Graph -ListAvailable确认模块已安装;若用requirements.psd1,检查文件路径是否正确 - 获取用户不全:必须加上
-All $true参数,否则只会返回前100条用户数据
内容的提问来源于stack exchange,提问作者KEM
相关产品推荐
相关产品推荐

