You have to search at the certification level, because that includes both the due date and sign-off date
Here’s an example of how you would do that using the PowerShell SDK
Import-Module PSSailpoint
$reportOutput = @()
$campaignfilter = "name sw `"2024`""
$campaigns = Invoke-Paginate -Function "Get-ActiveCampaigns" -InitialOffset 0 -Limit 10000 -Increment 250 -Parameters @{"Filter" = $campaignfilter}
foreach ($campaign in $campaigns) {
$certs = Invoke-Paginate -Function "Get-IdentityCertifications" -InitialOffset 0 -Limit 10000 -Increment 250 -Parameters @{"Filters" ="campaign.id eq `"$($campaign.id)`""}
foreach ($cert in $certs) {
if($cert.due -le $cert.signed){
$reportObject = [PSCustomObject]@{
CampaignName = $campaign.name
ReviewerName = $cert.reviewer.name
DecisionsTotal = $cert.decisionsTotal
DecisionsMade = $cert.decisionsMade
DueDate = $cert.due
SignedOff = $cert.signed
}
$reportOutput += $reportObject
}
}
}
$reportOutput | Sort-Object CampaignName,ReviewerName
Here’s an example output
Alternatively, if you just want the campaign, it’s basically the same script
Import-Module PSSailpoint
$reportOutput = @()
$campaignfilter = ""
$campaigns = Invoke-Paginate -Function "Get-ActiveCampaigns" -InitialOffset 0 -Limit 10000 -Increment 250 -Parameters @{"Filter" = $campaignfilter}
foreach ($campaign in $campaigns) {
$certs = Invoke-Paginate -Function "Get-IdentityCertifications" -InitialOffset 0 -Limit 10000 -Increment 250 -Parameters @{"Filters" ="campaign.id eq `"$($campaign.id)`""}
foreach ($cert in $certs) {
if($cert.due -le $cert.signed){
$reportObject = [PSCustomObject]@{
CampaignName = $campaign.name
}
$reportOutput += $reportObject
}
}
}
$reportOutput | Select-Object CampaignName -Unique| Sort-Object CampaignName
That output looks like this