Functions/Base/Wait-OIMObject.ps1

Function Wait-OIMObject{
    [CmdletBinding()]
    param (
        [Parameter(ValueFromPipeline=$true,Mandatory=$true)]
            $Object,
        [Parameter(Mandatory=$true)]
            [string]$PropertyName,
        [Parameter(Mandatory=$true)]
            $Value,
        $timeout = 300,
        $sleep = 3
    )
    Begin{}
    Process{

        ForEach($xObjectkey in $Object.xObjectKey){

            $xmlXObjectKey = [xml] $xObjectkey
            $remainingtime = $timeout
            $current = Get-OIMObject -ObjectName $xmlXObjectKey.key.T -id $xmlXObjectKey.key.P

            While($current.$PropertyName -ne $Value -and $remainingtime -ge 0){
                Write-Progress "Wait for $($xmlXObjectKey.key.T)/$($xmlXObjectKey.key.P) $PropertyName = '$Value' seconds remaining:$remainingtime" -PercentComplete ((($timeout-$remainingtime)/$timeout )*100)

                Start-Sleep -Seconds $sleep
                $remainingtime -= $sleep

                $current = Get-OIMObject -ObjectName $xmlXObjectKey.key.T -id $xmlXObjectKey.key.P
            }

            if($current.$PropertyName -ne $Value){
                Write-Warning "Timeout waiting for $($xmlXObjectKey.key.T)/$($xmlXObjectKey.key.P) to reach $PropertyName = '$Value' (current value: '$($current.$PropertyName)')"
            }

            $current
        }

    }
    End{}
}