我正在尝试在我域中的所有 Azure AD 用户计算机上安装 Microsoft Edge 版本。到目前为止,我有以下脚本,我认为它应该可以工作,但它不断为输出中列出的每个用户返回未经授权的错误。
# Set your application (client) ID, tenant ID, and client secret
$clientId = "client id goes here"
$tenantId = "tenant id goes here"
$clientSecret = "secret goes here"
# Get an access token for the Microsoft Graph API
$uri = "https://login.microsoftonline.com/$tenantId/oauth2/v2.0/token"
$body = @{
grant_type = "client_credentials"
client_id = $clientId
client_secret = $clientSecret
scope = "https://graph.microsoft.com/.default"
}
$response = Invoke-RestMethod -Uri $uri -Method Post -ContentType "application/x-www-form-urlencoded" -Body $body
$accessToken = $response.access_token
# Get all users in the domain
$uri = "https://graph.microsoft.com/v1.0/users"
$headers = @{
Authorization = "Bearer $accessToken"
}
$users = (Invoke-RestMethod -Uri $uri -Headers $headers).value
# Get the Edge version for each user
$edgeVersions = @()
foreach ($user in $users) {
$uri = "https://graph.microsoft.com/beta/users/$($user.id)/devices"
$devices = (Invoke-RestMethod -Uri $uri -Headers $headers).value
foreach ($device in $devices) {
if ($device.deviceOSType -eq "Windows") {
$edgeVersion = $device.additionalProperties.'msedge_version'
if ($edgeVersion) {
$edgeVersions += [PSCustomObject]@{
User = $user.displayName
Device = $device.displayName
EdgeVersion = $edgeVersion
}
}
}
}
}
# Display the Edge versions
$edgeVersions | Format-Table -AutoSize
我从这里获取 ID:
我已授予 Azure 应用程序以下权限(可能超出需要):
我通过右键单击并选择来加载 powershell Run As Administrator。
它仍然说[Invoke-RestMethod is unauthorized]
。
我显然在某个地方缺少某些权限,但我不知道在哪里。有什么想法吗?
答案1
https://graph.microsoft.com/beta/users/userID/devices
已弃用本文档页面因此无论权限如何它都不会返回任何数据。我不知道有哪个属性可以替代该msedge_version
属性。
答案2
假设您确实通过查询获取了所有用户,那么令牌应该没问题,而且我认为权限也没有问题。正如 @Crimsonfox 提到的,列出用户设备的选项已被弃用。
您可以在此处测试您的查询,还可以查看有哪些可用的选项: https://developer.microsoft.com/en-us/graph/graph-explorer
Unauthorized - 401 - 887ms
我做了一些测试,执行时也收到 401 错误 ( ) https://graph.microsoft.com/beta/me/Devices
。尝试使用已使用的 ID 时https://graph.microsoft.com/v1.0/users/6e7b768e-07e2-4810-8459-485f84f8f204/managedDevices
,API 返回错误 400 - 错误请求。
我碰到本文返回已安装的应用程序,但我找不到有关 Microsoft Edge 以及如何获取其版本的任何信息。查询:
https://graph.microsoft.com/v1.0/me/teamwork/installedApps?$expand=teamsAppDefinition
答案3
如果问题出在请求上
https://graph.microsoft.com/beta/users/userID/devices
,那么可能还有替代方案。
微软文章 列出拥有的设备 建议使用以下代码:
Import-Module Microsoft.Graph.Users
# A UPN can also be used as -UserId.
Get-MgUserOwnedDevice -UserId $userId
文章中给出了一个响应的示例,尽管我认为它与该命令的 HTTP 变体更相关:
HTTP/1.1 200 OK
Content-type: application/json
{
"value": [
{
"id": "id-value"
}
]
}
获得 ID 后,可以使用以下方式检索设备本身: Get-MgDevice 命令。
参考 : 获取 MgUserOwnedDevice。