When running sync (FIM 2010 / MIM 2016) or scripting against FIMService we sometimes have to wait for some WorkFlow to finish before we continue.
Using a small script that can be called to do the wait is a solution I use at several customers.
The example script below uses my FIMService PowerShell Module.
It takes two parameters.
The $Creator is the Creator whose request we are waiting for. The default creator is the Built-in Synchronization Account.
The $RetryInterval is the sleep time we use between checking the status of the requests still in PostProcessing.
At some customers I have also added some more logic to query for Failed requests and act upon them as well.
<# Script that waits for WF triggered by requests. Used in Schedules to get dynamic sleep time before importing results after export to FIM Service. Default Creator is Built-in Synchronization Account. #> PARAM( [string]$Creator = 'fb89aefa-5ea1-47f1-8890-abe7797d6497', [int]$RetryInterval = 30 ) if(!(Get-Module -Name FIMServiceModule)) { Import-Module 'D:\FIMData\FIMServiceModule.psm1' -ArgumentList 'http://idmservice.ad.konab.net:5725/resourcemanagementservice' } $NotDone = $true while($NotDone) {$Running=GetByxPath -xPath "/Request[Creator='$Creator' and RequestStatus='PostProcessing']" if($Running) { (Get-Date -Format 'yyyy-MM-dd HH:mm:ss') + ": WF is not done.. Waiting " + $RetryInterval + " seconds" Start-Sleep -Seconds $RetryInterval } else { (Get-Date -Format 'yyyy-MM-dd HH:mm:ss') + ": WF is done. Continuing" $NotDone=$false } }
Pingback: Scheduling MIM with advanced options - Kent Nordström | konab.com