使用PowerShell调用Microsoft Graph API获取LAPS本地管理员密码失败排查
问题排查与解决方案
1. 确认单设备查询的请求格式
单设备查询的正确端点为 https://graph.microsoft.com/beta/deviceLocalCredentials/{deviceId},这里的deviceId必须是设备的Azure AD对象ID,而非设备名称、本地UUID或其他ID类型。
- 验证设备ID:通过
Get-MgDevicecmdlet获取目标设备的Id属性,确保查询时使用该值。
2. 检查权限的实际生效状态
虽然已分配DeviceLocalCredential.ReadBasic.All和DeviceLocalCredential.Read.All权限,需确认:
- 应用权限是否已完成管理员同意(应用权限必须由管理员授予同意才会生效);
- 若使用委派权限,当前登录账户是否已获得对应权限的同意。
- 检查路径:Azure AD应用注册 → API权限 → 确认权限旁显示“已授予”状态,未授予则点击“授予管理员同意”。
3. 修正PowerShell请求语法
使用Invoke-MgGraphRequest时,确保请求格式正确,示例:
$targetDeviceId = "目标设备的Azure AD对象ID" Invoke-MgGraphRequest -Method Get -Uri "https://graph.microsoft.com/beta/deviceLocalCredentials/$targetDeviceId"
- 若报
404 Not Found:优先排查设备ID是否错误; - 若报
403 Forbidden:检查权限同意状态,或是否存在条件访问策略限制; - 若返回字段不全:确认是否使用
$select参数过滤了密码字段,或权限仅为ReadBasic.All(该权限无法获取密码)。
4. 验证令牌的权限范围
通过Get-MgContext查看当前令牌的Scopes列表,确认DeviceLocalCredential.Read.All在列。若缺失,重新登录并指定权限:
Connect-MgGraph -Scopes "DeviceLocalCredential.Read.All"
5. 确认设备LAPS同步状态
- 用
Get-LapsADPassword -Identity 设备名称验证本地密码已存在且有效; - 通过Graph批量查询
deviceLocalCredentials确认该设备已在返回列表中,确保密码已同步到Azure AD。
6. 处理返回结果不完整问题
若JSON缺少密码字段:
- 确保请求使用的是
DeviceLocalCredential.Read.All权限; - 移除请求中的
$select参数(若存在),避免过滤掉敏感字段; - beta端点偶有字段返回差异,可直接使用完整端点查询,不添加额外参数。
内容的提问来源于stack exchange,提问作者Bernietechy
相关产品推荐
相关产品推荐

