Skip to main content

I cobbled this together from several items in the Automox Labs and API documentation:


$orgID = "myorgid"
$apiKey = 'myapikeyhere'
$filepath = ‘.\ServerInventory.csv’

$page = 0
$limit = 500
$data = @()

Write-Output "Page"

while($true) {
$headers = @{"Authorization" = "Bearer $apiKey" }
$url = "https://console.automox.com/api/servers?$orgID?l=$limit&p=$page"
$response = (Invoke-WebRequest -Method Get -Uri $url -Headers $headers).Content | ConvertFrom-Json

Write-Output $page
$data += $response
$page += 1

if($response.count -lt $limit) {
break
}
}
$data | Group-Object display_name | Sort-Object name | Select-Object Count,name `
| Export-Csv -Path $filepath -NoTypeInformation

The result is that it produces a csv of 500 server names as I’d expect. When I change “$page” to “1” in the script (and change the csv output file name) and run it again, it produces a new, blank csv.


I’ve read this: About Automox API


and feel like I’m doing it correctly, but it seems like I may be missing something - or am just doing something wrong.


Thoughts?

This is what I like to use to pull all devices. We have over 3k devices and it does it well.


$orgID = ""
$apiKey = ""

###### Get Devices
$pageindex = 0
$Items = New-Object -TypeName "System.Collections.ArrayList"
$headers = @{ "Authorization" = "Bearer $apiKey" }

Do {
$url = "https://console.automox.com/api/servers?o=$orgID&page=$pageindex"
$Devices =(Invoke-restmethod -Method Get -Uri $url -Headers $headers)
foreach ($Item in $Devices) {$Items += $Item}
$pageindex++
}
Until ($Devices.count -lt 500)
###

Thanks; I will give that a try!


Just note that your devices are all contained in the $Items object when its done.


How do you output that into a CSV?


$Items | Export-Csv -NoTypeInformation c:\temp\devices.csv

Your script ran fast and worked perfectly - thank you!


Reply