Public/Wait-IAMCoreSyncJob.ps1

function Wait-IAMCoreSyncJob {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory = $true, ValueFromPipelineByPropertyName = $true)]
        [ValidatePattern("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$")] # Is a guid connector object id
        [string] $Id,

        [Parameter(Mandatory = $false)]
        [ValidateRange(1, [int]::MaxValue)]
        [int] $TimeoutMinutes = 30,

        [Parameter(Mandatory = $false)]
        [ValidateRange(1, [int]::MaxValue)]
        [int] $Sleep = 5
    )

    process {
        $Timeout = [DateTime]::UtcNow.AddMinutes($TimeoutMinutes)

        $_Job = Get-IAMCoreSyncJob -Id $Id

        while($Timeout -gt [DateTime]::UtcNow -and $_Job.state -in @("Pending", "Processing")) {
            Write-Verbose "Waiting for IAM Core sync job '$Id' to start. Current state: '$($_Job.state)'. Checking again in $Sleep seconds..."
            Start-Sleep -Seconds $Sleep
            $_Job = Get-IAMCoreSyncJob -Id $Id
        }

        if($Timeout -le [DateTime]::UtcNow) {
            throw "Timeout waiting for IAM Core sync job '$Id' to start. Last known state: '$($_Job.state)'"
        }
        
        return $_Job
    }
}