Private/Test-SCVirtualMachineBackingUpStatus.ps1

function Test-SCVirtualMachineBackingUpStatus {
    #Requires -Version 3.0
    #Requires -Modules virtualmachinemanager

    [CmdletBinding()]
    [OutputType([System.Boolean])]
    Param (
        [Parameter(Mandatory)]
        [Microsoft.SystemCenter.VirtualMachineManager.VM]$VM
    )

    $ErrorActionPreference = 'Stop'

    Write-Debug -Message ('ENTER {0}' -f $MyInvocation.MyCommand.Name)

    try {
        Write-Debug -Message ('ENTER TRY {0}' -f $MyInvocation.MyCommand.Name)

        Write-Debug -Message ('$VM: ''{0}''' -f $VM.Name)

        Write-Debug -Message '$VMHost = $VM.VMHost'
        $VMHost = $VM.VMHost
        Write-Debug -Message ('$VMHost: ''{0}''' -f [string]$VMHost)

        Write-Debug -Message ('$HVVM = Invoke-Command -ComputerName ''{0}'' -ScriptBlock {{Get-VM -Id ''{1}'')}}' -f $VMHost.Name, $VM.VMId)
        $HVVM = Invoke-Command -ComputerName $VMHost.Name -ScriptBlock {Get-VM -Id $using:VM.VMid}
        Write-Debug -Message ('$HVVM: ''{0}''' -f [string]$HVVM)

        Write-Debug -Message ('$HVVM.PrimaryOperationalStatus: ''{0}''' -f $HVVM.PrimaryOperationalStatus)
        Write-Debug -Message ('$HVVM.SecondaryOperationalStatus: ''{0}''' -f $HVVM.SecondaryOperationalStatus)
        Write-Debug -Message 'if ($HVVM.PrimaryOperationalStatus -eq ''InService'' -and $HVVM.SecondaryOperationalStatus -eq ''BackingUpVirtualMachine'')'
        if ($HVVM.PrimaryOperationalStatus -eq 'InService' -and $HVVM.SecondaryOperationalStatus -eq 'BackingUpVirtualMachine') {
            Write-Debug -Message '$true'
            $true
        }
        else {
            Write-Debug -Message '$false'
            $false
        }

        Write-Debug -Message ('EXIT TRY {0}' -f $MyInvocation.MyCommand.Name)
    }
    catch {
        Write-Debug -Message ('ENTER CATCH {0}' -f $MyInvocation.MyCommand.Name)

        Write-Debug -Message ('{0}: $PSCmdlet.ThrowTerminatingError($_)' -f $MyInvocation.MyCommand.Name)
        $PSCmdlet.ThrowTerminatingError($_)

        Write-Debug -Message ('EXIT CATCH {0}' -f $MyInvocation.MyCommand.Name)
    }

    Write-Debug -Message ('EXIT {0}' -f $MyInvocation.MyCommand.Name)
}