Skip to content

Instantly share code, notes, and snippets.

@SMSAgentSoftware
Last active December 10, 2017 20:43
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save SMSAgentSoftware/cad052da6bc5a4056ec2b1d0e2621538 to your computer and use it in GitHub Desktop.
Save SMSAgentSoftware/cad052da6bc5a4056ec2b1d0e2621538 to your computer and use it in GitHub Desktop.
Retrieves data from the Intune Data Warehouse
Function Get-IntuneDataWarehouseData {
# Function to query the Intune Data Warehouse for data
# Requires an access token to be created first via the New-IntuneDataWarehouseAccessToken function
[CmdletBinding()]
Param(
[Parameter()] # this is the custom feed URL for your for your tenant for the InTune Data Warehouse
$WarehouseUrl = "https://fef.msun02.manage.microsoft.com/ReportingService/DataWarehouseFEService?api-version=beta",
[Parameter()]
$DataEntity = "devices", # this is the Data Entity you wish to query
[Parameter()]
$Filter, # OData Query parameter
[Parameter()]
$Top, # OData Query parameter
[Parameter()]
$OrderBy, # OData Query parameter
[Parameter()]
$Select, # OData Query parameter
[Parameter()]
$Skip, # OData Query parameter
[Parameter()][Switch]
$ListDataEntities # Use this switch to list the available data entities
)
# Create the custom URL
$UriBuilder = new-object System.UriBuilder($warehouseUrl)
If ($ListDataEntities)
{
$UriBuilder = new-object System.UriBuilder($WarehouseUrl)
}
Else
{
$URI = $WarehouseUrl.Insert($WarehouseUrl.IndexOf("?"), "/$DataEntity")
# Add query parameters
If ($filter -ne $null)
{
$URI = "$URI&`$filter=$Filter"
}
If ($select -ne $null)
{
$URI = "$URI&`$select=$select"
}
If ($top -ne $null)
{
$URI = "$URI&`$top=$top"
}
If ($orderby -ne $null)
{
$URI = "$URI&`$orderby=$orderby"
}
If ($skip -ne $null)
{
$URI = "$URI&`$skip=$skip"
}
$UriBuilder = new-object System.UriBuilder($URI)
}
# Create an HttpClient
$HttpClient = New-Object System.Net.Http.HttpClient
$HttpClient.Timeout = [timespan]"00:10:00" # Extend the timeout to 10 minutes in case of slow network / high data volume
$HttpClient.DefaultRequestHeaders.Authorization = New-Object System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", $AccessToken)
# Load the data
$Result = (($httpClient.GetAsync($uriBuilder.Uri).Result).Content.ReadAsStringAsync().Result | ConvertFrom-Json).Value
If ($ListDataEntities)
{
$Result = $Result.URL | Sort
}
$HttpClient.Dispose()
return $Result
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment