Use API to Pull a List of All Outstanding Critical Updates and the Age of the Update

  • 23 December 2020
  • 2 replies

Userlevel 5

This script will dump all available critical updates for all of the endpoints in an organization into a .csv file along with the number of days the update has been available and if the update requires a reboot.

You’ll need to set the following before running the script:

$apiKey = 'YOUR_API_KEY' - in your console, go to Settings->API and select the API key. Note that the API key is per admin user, so you and another admin in your console will have different API keys.

$orgID = 'YOUR_ORG_ID' - put in your Org ID which can be found by looking at the URL on the dashboard and selecting the value after the “?o=”: []. In this example the Org ID is 1234.

You can also modify $filepath if you want to change the file name or save it in a different location. Keep in mind the script will overwrite a previously generated file if it exists.

$apiKey = 'YOUR_API_KEY'
$orgID = 'YOUR_ORG_ID'

$filepath = 'C:\Temp\CritUpdates.csv'

Set-Content $filepath -Value "Computer,display_name,Age(Days),requires_reboot"

$apiInstance = ''
$apiTable = 'servers'
$orgAndKey = "?o=$orgID&api_key=$apiKey"

# Put components together
$getURI = $apiInstance + $apiTable + $orgAndKey

# Get the json body of the Web Request
$jsonReturn = (Invoke-WebRequest -UseBasicParsing -Method Get -Uri $getURI).Content

# Convert to object with manipulatable properties/values
$servers = $jsonReturn | ConvertFrom-Json
$servers = $servers | Sort-Object name

# Check each server for software
foreach ($server in $servers) {

$serverID = $
$serverName = $

Write-Output $serverName

$orgAndKey = "/$serverID/packages?o=$orgID"

# Put components together
$getURI = $apiInstance + $apiTable + $orgAndKey

$headers = @{ "Authorization" = "Bearer $apiKey" }
$response = (Invoke-WebRequest -Method Get -Uri $getURI -Headers $headers).Content | ConvertFrom-Json

$response | Where-Object {$_.installed -EQ $false -and $_.severity -EQ 'critical'} `
| Select-Object @{label=”Computer”; Expression= {"$serverName"}},Display_Name,`
@{label=”Age(Days)”; Expression= {(New-TimeSpan -Start ([System.DateTime]::ParseExact($_.create_time,'yyyy-MM-ddTHH🇲🇲ss+0000',$null))).Days}},requires_reboot `
| Sort-Object $_.Display_Name | Export-Csv -Path $filepath -NoTypeInformation -Append -Force


2 replies


I know this is pretty old, but the script does not write anything to the csv?