Last active
July 13, 2022 08:40
-
-
Save darzo27/1ab35407991ba96ffe913ffc4ade853d to your computer and use it in GitHub Desktop.
SailPoint IdentityNow - Retrieve 10k+ results from IDN API.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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