HyperV verification snapshot
De BlaxWiki
Révision datée du 2 juillet 2020 à 11:20 par 127.0.0.1 (discussion) (Page créée avec « <pre> <# .SYNOPSIS Envoie le nombre de snapshots dans le test FS et fait divers test. #> # $action = New-ScheduledTaskAction -Execute 'Powershell.exe' -Argument '-NoProfi... »)
<#
.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