Объект выбора PowerShell не работает с «Invoke-MgGraphRequest», но работает с Invoke-RestMethod

Раньше я получал все устройства Intune с помощью Invoke-RestMethod и выполнял выбор объекта для возвращаемых данных. Теперь, когда мне нужно использовать Invoke-MgGraphRequest, возвращаемый массив не любит select-object. Значение свойства возвращается по имени «Array.property», а не по Select-Object.

есть ли способ использовать здесь объект выбора?

В примере ниже:

$Devices | select deviceName   # Does not work #
$Devices.devicename            # it works #
$uri = "https://graph.microsoft.com/beta/deviceManagement/managedDevices?`$Filter= (deviceType eq 'desktop') or (deviceType eq 'windowsRT') or (deviceType eq 'winEmbedded')"  #30 min to run - 136 trys
$DevicesResponse = (Invoke-MgGraphRequest -Uri $uri -Method Get)
$Devices = $DevicesResponse.value
$DevicesNextLink = $DevicesResponse.'@odata.nextLink'
$i = 0
while ($DevicesNextLink -ne $null) {    
    Write-Host $i -BackgroundColor DarkGreen
    $DevicesResponse = (Invoke-MgGraphRequest -Uri $DevicesNextLink -Method Get)
    $DevicesNextLink = $DevicesResponse.'@odata.nextLink'
    $Devices += $DevicesResponse.value
    $i++
    $Devices.count
    $date = Get-Date
    $date.DateTime
}
Как установить 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...
2
0
90
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Invoke-MgGraphRequest выводит hashtable по умолчанию в PowerShell 5.1 Select-Object не может обрабатывать их из конвейера, поэтому решение простое: -OutputType psobject, чтобы вместо этого командлет выводил пользовательские объекты. Логику пейджинга также можно упростить:

$uri = "https://longurihere...."
$i = 0
$devices = do {
    Write-Host $i -BackgroundColor DarkGreen
    $response = Invoke-MgGraphRequest GET $uri -OutputType psobject
    $uri = $response.'@odata.nextLink'
    if ($response.value) {
        $response.value
    }
    $i++
    (Get-Date).DateTime | Write-Host
}
while ($uri)

$Devices | Select-Object deviceName # should work

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