#***************************************
#*            forcestop.ps1
#***************************************

##########################################
# Configuration

# VM`
# F
#   [<VM̖O(OS̃zXg)>]="<VM̖O(Hyper-V }l[W[̕\)><Hyper-V zXgIPAhX>"
$SERVERS = @{
    "server1" = "guest-server1 10.5.1.10";
    "server2" = "guest-server2 10.5.1.10";
}

# ~`FbN̍ő厎s
$CHECK_LOOP_MAX = 10

# ~`FbNԊu(b)
$SLEEP_WAIT = 3

##########################################

if ( $env:CLP_FORCESTOP_MODE -ne "1" ) {
    # `FbN̓
    # [JT[o[Hyper-V }l[W[̕\Hyper-V zXgIPAhX擾
    $target = $env:CLP_SERVER_LOCAL
    if ( ! $SERVERS.ContainsKey($target) ) {
        # T[o[ɑΉVM`Ȃ
        exit 1
    }

    $info = $SERVERS[$target].split()
    $vmname = $info[0]
    $hypervip = $info[1]

    # ~̃eXg
    $Credential = Import-Clixml -Path "C:\Users\Admin002\scripts\forcestop.s\HyperVCred.xml"
    Invoke-Command -ComputerName $hypervip -Credential $Credential -ScriptBlock {Stop-VM $using:vmname -TurnOff -WhatIf} > $null

    if ($?) {
        # ~eXg̐
    } else {
        # ~eXg̎s
        exit 2
    }

} else {
    # ~s̓
    # _ET[o[Hyper-V }l[W[̕\Hyper-V zXgIPAhX擾
    $target = $env:CLP_SERVER_DOWN
    if ( ! $SERVERS.ContainsKey($target) ) {
        # T[o[ɑΉVM`Ȃ
        exit 3
    }

    $info = $SERVERS[$target].split()
    $vmname = $info[0]
    $hypervip = $info[1]

    # _ET[o[̋~
    $Credential = Import-Clixml -Path "C:\Users\Admin002\scripts\forcestop.s\HyperVCred.xml"
    Invoke-Command -ComputerName $hypervip -Credential $Credential -ScriptBlock {Stop-VM $using:vmname -TurnOff} > $null
    if ($?) {
        # ~̐
    } else {
        # ~̎s
        exit 4
    }

    # ~`FbN
    $loop_count = 0
    while ( $loop_count -lt $CHECK_LOOP_MAX ) {
        Invoke-Command -ComputerName $hypervip -Credential $Credential -ScriptBlock {Get-VM $using:vmname | findstr "Off"} > $null
        if ($?) {
            # ~mF
            break
        }

        Start-Sleep -Seconds $SLEEP_WAIT

        $loop_count++
    }

    if ( $loop_count -ge $CHECK_LOOP_MAX ) {
        # ~`FbÑ^CAEg
        exit 5
    }
}

exit 0