Skip to content

Instantly share code, notes, and snippets.

@darzo27
Last active July 13, 2022 08:40
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 darzo27/1ab35407991ba96ffe913ffc4ade853d to your computer and use it in GitHub Desktop.
Save darzo27/1ab35407991ba96ffe913ffc4ade853d to your computer and use it in GitHub Desktop.
SailPoint IdentityNow - Retrieve 10k+ results from IDN API.
#region IDN functions
function IdentitiesSearchAfter($token, $query, $searchAfterID, $limit, $IDNdisplayNameSearch)
{
#region IDN Search Queries
$identitySearchqry = "{`"query`": {`"query`": `"source.name:HR`")`"},`"indicies`": [`"identities`"],`"queryResultFilter`": {`"includes`": [`"attributes.uid`",`"attributes.displayName`",`"attributes.identificationNumber`",`"id`",`"status`",`"isManager`"]},`"sort`": [`"+id`"],`"includeNested`": false,`"searchAfter`": [`"$($searchAfterID)`"]}"
#eventSearchQry - have multiple queries that can be used, reuse the same logic to fetch 10k+ results
#endregion IDN Search Queries
$body = switch ($query)
{
"identitySearch" { $identitySearchqry }
# "eventSearch" { $eventSearchQry } - other queries
Default {return "#switch-invalid query"}
}
$headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$headers.Add("Content-Type", "application/json")
$headers.Add("Authorization", "Bearer $($IDNToken)")
try { $response = Invoke-RestMethod "https://tenant.api.identitynow.com/v3/search?count=true&offset=0&limit=$($limit)" -Method 'POST' -Headers $headers -Body $body -ResponseHeadersVariable 'searchAfter_ResponseHeader' }
catch { Write-Error "Exception:" $_.Exception }
return $searchAfter_ResponseHeader, $response
}
#endregion IDN functions
#region IdentitiesSearch
$queryTypes = @("identitySearchqry" <#,"eventSearchQry"#>)
$searchAfterID = $null
$IdentitiesSearchAfter_Header = $null
$IdentitiesSearchAfter_Result = @()
$IdentitiesSearchAfter_Resulttemp = $null
foreach($queryType in $queryTypes)
{
#Search & Get Count of records
$IdentitiesSearchAfter_Header, $IdentitiesSearchAfter_Resulttemp = IdentitiesSearchAfter -token $IDNToken -query $queryType -searchAfterID $searchAfterID -limit 1
#if length >= totalcount : stop
$verbose=$true; if($verbose) {Write-Host ">>>Initialize-1/3 IdentitiesSearch | $($queryType) | Total-Count: $([int]$IdentitiesSearchAfter_Header.("X-Total-Count")[0]) | Array Size: $($IdentitiesSearchAfter_Result.Length) | searchAfterID:$($searchAfterID)_"}
do{
$verbose=$true; if($verbose) {Write-Host ">AggregateFromIDN-2/3 | $($queryType) | Total-Count: $([int]$IdentitiesSearchAfter_Header.("X-Total-Count")[0]) | Array Size: $($IdentitiesSearchAfter_Result.Length) | searchAfterID:$($searchAfterID)"}
$IdentitiesSearchAfter_Header, $IdentitiesSearchAfter_Resulttemp = IdentitiesSearchAfter -token $IDNToken -query $queryType -searchAfterID $searchAfterID -limit 250
$IdentitiesSearchAfter_Result += $IdentitiesSearchAfter_Resulttemp
$searchAfterID = $IdentitiesSearchAfter_Resulttemp[$IdentitiesSearchAfter_Resulttemp.length - 1].id
$IdentitiesSearchAfter_Resulttemp = $null
# $IdentitiesSearchAfter_Resulttemp[$IdentitiesSearchAfter_Resulttemp.length - 1].id
}
while($([int]$IdentitiesSearchAfter_Result.Length) -lt $([int]$IdentitiesSearchAfter_Header.("X-Total-Count")[0]) )
Write-Host ">>>Complete-3/3 IdentitiesSearch | $($queryType) | Total-Count: $([int]$IdentitiesSearchAfter_Header.("X-Total-Count")[0]) | Array Size: $($IdentitiesSearchAfter_Result.Length) | searchAfterID:$($searchAfterID)"
}
#do something with:
$IdentitiesSearchAfter_Result
#endregion IdentitiesSearch
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment