Powershell с Graph API и PSCustomObject

Итак, я просто ищу кого-нибудь, кто поможет мне пересечь финишную черту с вопросом.

Я использую API Graph для запроса лицензий, назначенных пользователям из Microsoft Entra.

Пока что я могу запросить одного пользователя и отобразить назначенные лицензии, но мне хотелось бы вывести информацию в PSCustomObject, и здесь я теряюсь.

Этот фрагмент кода запрашивает каталог и возвращает всех пользователей.

$GetUsersUrl = "https://graph.microsoft.com/beta/users"
$Data = Invoke-RestMethod -Uri $GetUsersUrl -Headers $Headers -Method Get 
$Result = ($Data | select-object Value).Value
$Users = $Result | select DisplayName,UserPrincipalName,Id

Затем я проверяю userPrincipalName, соответствующее строке, и извлекаю оттуда назначенные лицензии.

$UPN = ($Users | where {$_.userPrincipalName -like "UPN@domain*"})

$lic = Invoke-RestMethod -Uri "https://graph.microsoft.com/v1.0/users/$($UPN.id)/licenseDetails" -Headers $Headers -Method Get

$skuPartNumber = $((($lic | select-object Value).Value).skuPartNumber)

Теперь я просто хочу взять полученный результат и сохранить его в PSCustomObject вместе с информацией в переменной $UPN.

В идеале я хотел бы использовать цикл foreach, чтобы сделать это для каждого пользователя, но я еще не совсем готов (я также открыт для помощи и предложений по этому поводу). Любая помощь приветствуется.

Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
1
0
101
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Что-то очень важное, что вам не хватает, это обработка пейджинга , без механизма рекурсивного цикла (do / while в примере ниже) вы можете в конечном итоге потерять информацию. Предполагая, что вы хотите объединить выходные данные LicenseDetails с выходными данными пользователя, вы можете это сделать следующим образом:

$uri = 'https://graph.microsoft.com/v1.0/users?$select=displayName, userPrincipalName, id'
$result = do {
    $Data = Invoke-RestMethod -Method Get -Uri $uri -Headers $Headers
    $uri = $Data.'@odata.nextLink'

    foreach ($user in $Data.value) {
        $licenseUri = 'https://graph.microsoft.com/v1.0/users/{0}/licenseDetails' -f $user.id
        $allSkuPartNumbers = do {
            $lic = Invoke-RestMethod -Method Get -Uri $licenseUri -Headers $Headers
            $licenseUri = $lic.'@odata.nextLink'
            if ($lic) {
                $lic.value.skuPartNumber
            }
        }
        while ($licenseUri)

        [pscustomobject]@{
            displayName       = $user.displayName
            userPrincipalName = $user.userPrincipalName
            id                = $user.id
            # `$allSkuPartNumbers` will likely be an array,
            # might need `-join` here if exporting to CSV
            skuPartNumber     = $allSkuPartNumbers
        }
    }
}
while ($uri)

# do stuff with `$result`..
$result

@thekevinkalis, моя вина, у меня была опечатка во внутреннем цикле -Uri $uri, должно было быть -Uri $licenseUri. Обновил свой ответ.

Santiago Squarzon 05.05.2024 07:49

Вау, это просто потрясающе. Это работает именно так, как я хочу.

thekevinkalis 05.05.2024 07:54

Другие вопросы по теме

Похожие вопросы

Не удалось добавить настройки приложения с двоеточием с помощью сценария Bicep в службу приложений Azure
Извлечь значение из Key Vault для использования в локальном файле web.config
Azure AI Studio — вызовы API развертывания индекса ML GPT4 не работают из-за ошибки access_token
Роли, назначенные управляемому удостоверению в Azure, отсутствуют в токене
Могу ли я иметь секреты, срок действия которых не истекает в системе единого входа Microsoft через Azure Microsoft Entra ID?
Az Powershell – невозможно прочитать содержимое файла CSV
Бета-версия C# Graph позволяет получить все типы назначений с их правилами обнаружения для всех Win32LobApps за один вызов
Служба связи Azure — ошибка «Приложение пытается получить доступ к службе 1fd5118e-2576-4263-8130-9503064c837a». Тогда известное решение не работает
Распространение самостоятельного расширения Chrome через организацию, управляемую Azure
Можно ли использовать PhraseListGrammar с IntentRecouncer в Microsoft Speech SDK для Java?