HyperV verification snapshot

De BlaxWiki
Aller à la navigationAller à la recherche
<#
.SYNOPSIS
Envoie le nombre de snapshots dans le test FS et fait divers test.
#>

# $action = New-ScheduledTaskAction -Execute 'Powershell.exe' -Argument '-NoProfile -WindowStyle Hidden -File "C:\Agarik\Scripts\supervision-hv.ps1"'
# $trigger =  New-ScheduledTaskTrigger -Once -At "12:00" -RepetitionInterval (New-TimeSpan -Minutes 15)
# $principal = New-ScheduledTaskPrincipal -UserId "$([System.Security.Principal.WindowsIdentity]::GetCurrent().Name)" -RunLevel Highest -LogonType S4U
# Register-ScheduledTask  -Action $action -Trigger $trigger -TaskName "Supervision HV" -Description "Supervision HV" -Principal $principal


# Nom de supervision et service
$global:server=[System.Net.Dns]::GetHostByName(($env:computerName)).Hostname
$global:service="fs"

# Correspondance volume <--> hv
$VolumeHV = @{
    Volume1 = 'hv01'
    Volume2 = 'hv02'
    Volume3 = 'hv03'
    Volume4 = 'hv04'
    Volume5 = 'hv05'
    Volume6 = 'hv06'
    Volume7 = 'hv07'
    Volume8 = 'hv08'
    Volume9 = 'hv09'
    Volume10 = 'hv10'

}

# Liste des VMs dont on ignore les snapshots
$ignoreSnapshotVMs=@(
    "exemple1",
    "exemple2"
    )

# Age du snapshot avant Erreur (en heure)
$CritSnapshotThreshold = 24

# Debut script
$ErrorActionPreference = "Stop"
Import-Module "$PSScriptRoot\agarik.psm1" -DisableNameChecking

If(([Environment]::OSVersion.Version -lt (new-object 'Version' 6,2)) -And (Test-Path "$env:programfiles\modules\Hyperv")){
	Import-Module "$env:programfiles\modules\HyperV" 
}


## Detection Snapshots
## Remonte une erreur si un snapshot datant de plus de XXX heures est trouvé

$vmWithSnapshot=(Get-VMSnapshot *)
Append-Supervision("Snapshots presents :")
Foreach ($vm in $vmWithSnapshot) {
    if ($ignoreSnapshotVMs -contains $vm.VMName) {
        Append-Supervision(" - &clear {0,-40} - Date : {1} - ignore" -f $vm.VMName, ($vm.CreationTime).ToString('yyyy-MM-dd HH:mm:ss'))
    }
    else {
        if ($vm.CreationTime -lt (get-date).AddHours(-1 * $CritSnapshotThreshold)) {
            Append-Supervision(" - &red {0,-40} - Date : {1} - plus de {2} heures" -f $vm.VMName, ($vm.CreationTime).ToString('yyyy-MM-dd HH:mm:ss'), $CritSnapshotThreshold)
            Raise-Error
        }
        else {
            Append-Supervision(" - &yellow {0,-40} - Date : {1}" -f $vm.VMName, ($vm.CreationTime).ToString('yyyy-MM-dd HH:mm:ss'))
        }
    }
}
if ($((Get-VMSnapshot * | measure).count) -eq 0) {
    Append-Supervision(" aucun snapshot")
}



## Volume clusters
## Remonte une erreur lorsqu'un volume de Cluster n'est pas sur le bon HV

Append-Supervision("`n`n Verification Volumes de cluster :")
foreach ($volume in Get-ClusterSharedVolume) {
    $correctHV=$VolumeHV[$volume.Name]
    if (!$correctHV) {
        Append-Supervision(" - &yellow $($volume.Name) non declare dans le script")
        Raise-Warning
    }
    elseif ($volume.OwnerNode -ne $correctHV) {
        Append-Supervision(" - &yellow $($volume.Name) n'est pas sur le bon hv : $($volume.OwnerNode) != $correctHV")
        Raise-Warning
    }
    else {
        Append-Supervision(" - &green $($volume.Name) : $correctHV")
    }
}



## Detection emplacements fichiers de VM
## Remonte une erreur quand un emplacement de fichier de VM n'est pas dans un CSV

Append-Supervision("`n`n Verification Emplacements fichiers :")
$count=0
foreach ($vm in Get-VM) {
    if ($vm.SmartPagingFilePath -inotmatch 'C:\\ClusterStorage\\*') {
        Append-Supervision(" - &yellow $($vm.VMname) : SmartPagingFilePath - $($vm.SmartPagingFilePath)")
        Raise-Warning
       $count++
    }
    if ($vm.ConfigurationLocation -inotmatch 'C:\\ClusterStorage\\*') {
        Append-Supervision(" - &yellow $($vm.VMname) : ConfigurationLocation - $($vm.ConfigurationLocation)")
        Raise-Warning
       $count++
    }
    if ($vm.SnapshotFileLocation -inotmatch 'C:\\ClusterStorage\\*') {
        Append-Supervision(" - &yellow $($vm.VMname) : SnapshotFileLocation - $($vm.SnapshotFileLocation)")
        Raise-Warning
       $count++
    }
}
if ($count -eq 0) {
    Append-Supervision("  Fichiers OK")
}
else {
    Raise-Warning
}



## Detection lecteur DVD avec ISO locale
## Remonte une erreur lorsqu'un DVD n'est pas sur un volume de cluster

Append-Supervision("`n`n Verification Emplacements ISO DVD :")
$count=0
foreach ($vm in Get-VM) {
    $DVDs=$vm | Get-VMDvdDrive
    foreach ($dvd in $DVDs) {
        if ($dvd.Path -and ($dvd.Path -inotmatch 'C:\\ClusterStorage\\*')) {
            Append-Supervision(" - &yellow {0} : Le DVD {1} n'est pas dans un Volume de Cluster" -f $vm.VMName,$dvd.Path)
            Raise-Warning
        }
    }
}
if ($count -eq 0) {
    Append-Supervision("  DVD OK")
}
else {
    Raise-Warning
}


Send-Supervision