From c6ceb76e2ae02ce688a8dc8fbf5af8147dbdab3f Mon Sep 17 00:00:00 2001
From: Ichbinus <151060943+Ichbinus@users.noreply.github.com>
Date: Mon, 18 Dec 2023 17:36:27 +0100
Subject: [PATCH] Update supervision_v4.0.ps1
---
supervision_v4.0.ps1 | 157 +++++++++++++++++++++++--------------------
1 file changed, 83 insertions(+), 74 deletions(-)
diff --git a/supervision_v4.0.ps1 b/supervision_v4.0.ps1
index 4cb995e..cd96f0d 100644
--- a/supervision_v4.0.ps1
+++ b/supervision_v4.0.ps1
@@ -5,21 +5,47 @@ Interface de supervision des machines virtuelles du service support
Auteur : Maxime Tertrais
Date creation : 27/11/2023
/Dernier modificateur : Maxime Tertrais
-Date derniere modification :
+Date derniere modification :04/12/2023
Ce script permet de superviser les machines virtuelles du service support:
- gestion des machines:
- - démarrer, arréter les machines
+ - démarrer, arréter, rebooter les machines
- renommer les machines (attention le renommage ne concerne que le nom dans l'hyper-V, l'ID du serveur au niveau du domaine ne change pas)
- -
-legende :
+ - Ajouter une machine à la liste des machine à tester
+ - Supprimer une machine de l'hyper-V et de la liste des machines à tester
+ - Gestion des snapshots des machines
+ - listing, création, renommage, suppression des snapshots
+ - restauration de snapshots
+ - Reboot du service jetty (operis) de la machine sélectionnée
+Pré-requis :
+ - Droit d'accès:
+ - l'utilisateur doit faire partis du groupe de sécurité GSG-Administrateur_hyper-V (=> voir avec le service infra pour ajouter un utilisateur au groupe)
+ - rendre disponible l'optional feature de windows Hyper-V:
+ - dans la recherche windows : fonctionnalitées facultatives
+ - cliquer sur "plus de fonctionnalités windows" (en bas de la liste)
+ - se loguer en admin local (au minimum)
+ - chercher dans le pop-up le module hyper-v pour powershell
+ - Hyper-V
+ - Outils d'administration Hyper-V
+ - Module Hyper-V pour Windows Powershell
+ - cocher la case correspondante et valider sur ok, un redémarrage est peut-être nécessaire
+
+Legende :
# : ligne de commentaire
### : ligne de debug (les logs)
-.EXAMPLE
-exemple1 : .\supervision
.NOTES
+Fonctionnement du script en mode fenètré.
+
Des améliorations pourraient etre apportées :
- -
+ - Gestion de l'installation du module PowerShell Hyper-V par GPO.
+ - Arrêt du défilement des résultats de tests.
+
+Les datagrid ne permettent de sélectionner qu'une seule ligne à la fois, donc on ne peut effectuer des actions que sur un objet à la fois.
+Ceci-dit, toutes les actions suite à clics commencent par un "foreach" pour permettre de réaliser les actions sur plusieurs ligne des datagrids si on souhaite autoriser cette manipulation.
+Attention, un ajustement des requètes / affichage sera peut-être nécessaire.
+
+.EXAMPLE
+N.A
#>
################################################################################################################################################
@@ -54,37 +80,23 @@ try {
$assemblyLoaded = $loadedAssemblies.FullName -contains $assembly
if ($null -ne $assemblyLoaded) {
$logassembly = "L'assembly '$assembly' est chargé correctement."
- WriteToLogFile0 $logassembly
+ ###WriteToLogFile0 $logassembly
} else {
$logassembly = "L'assembly '$assembly' n'est pas chargé correctement."
- WriteToLogFile0 $logassembly
+ ###WriteToLogFile0 $logassembly
}
}
$loaded_assembly_list = [System.AppDomain]::CurrentDomain.GetAssemblies()| Select-Object -Property FullName
foreach ($loaded_assembly in $loaded_assembly_list)
{
$logloadedassembly = "L'assembly suivante est chargé: '$loaded_assembly'"
- WriteToLogFile0 $logloadedassembly
+ ###WriteToLogFile0 $logloadedassembly
}
}
catch {
$logwpf = "ligne 55 - une exeption s'est produite $_.Exception.Message "
- WriteToLogFile0 $logwpf
+ ###WriteToLogFile0 $logwpf
}
-################################################################################################################################################
-################################################################################################################################################
-############################################################### prérequis ######################################################################
-################################################################################################################################################
-################################################################################################################################################
-
-## rendre disponible l'optional feature de windows Hyper-V:
-# => dans la recherche windows : fonctionnalitées facultatives
-# => se loguer en admin local
-# => chercher dans le pop-up le module hyper-v pour powershell
-# => Hyper-V
-# =>Outils d'administration Hyper-V
-# => Module Hyper-V pour Windows Powershell
-# => cocher la case correspondante et valider sur ok, un redémarrage est peut-être nécessaire
################################################################################################################################################
@@ -99,15 +111,15 @@ try {
# test de la bonne création de la table de hachage synchronisé
if ($syncHash -is [System.Collections.Hashtable] -and $syncHash -is [System.Collections.ICollection]) {
$loghashtabl = "La création de l'hashtable synchronisé s'est déroulée correctement."
- WriteToLogFile0 $loghashtabl
+ ###WriteToLogFile0 $loghashtabl
} else {
$loghashtabl = "Il y a eu un problème lors de la création de l'hashtable synchronisé."
- WriteToLogFile0 $loghashtabl
+ ###WriteToLogFile0 $loghashtabl
}
}
catch {
$loghashtabl = "ligne 93 - une exeption s'est produite $_.Exception.Message "
- WriteToLogFile0 $loghashtabl
+ ###WriteToLogFile0 $loghashtabl
}
################################################################################################################################################
@@ -125,33 +137,33 @@ try {
if ($newRunspace.ApartmentState -like "STA")
{
$logrunspace1 = "le runspace créé avec un ApartmentState correct en STA ."
- WriteToLogFile0 $logrunspace1
+ ###WriteToLogFile0 $logrunspace1
}else {
$logrunspace1 = "le runspace créé avec un ApartmentState incorrect ."
- WriteToLogFile0 $logrunspace1
+ ###WriteToLogFile0 $logrunspace1
}
if ($newRunspace.ThreadOptions -like "ReuseThread")
{
$logrunspace2 = "le runspace créé avec un ThreadOptions correct en ReuseThread ."
- WriteToLogFile0 $logrunspace2
+ ###WriteToLogFile0 $logrunspace2
}else {
$logrunspace2 = "le runspace créé avec un ThreadOptions incorrect ."
- WriteToLogFile0 $logrunspace2
+ ###WriteToLogFile0 $logrunspace2
}
# vérification de la variable sesion state proxy
$testSessionStateProxy = $newRunspace.SessionStateProxy.GetVariable("syncHash")
if ($null -ne $testSessionStateProxy)
{
$logrunspace3 = "le runspace créé avec un SessionStateProxy correct en associé à synchash ."
- WriteToLogFile0 $logrunspace3
+ ###WriteToLogFile0 $logrunspace3
}else {
$logrunspace3 = "le runspace créé avec un SessionStateProxy incorrect ."
- WriteToLogFile0 $logrunspace3
+ ###WriteToLogFile0 $logrunspace3
}
}
catch {
$logdeclarunspace = "ligne 137 - une exeption s'est produite $_.Exception.Message "
- WriteToLogFile0 $logdeclarunspace
+ ###WriteToLogFile0 $logdeclarunspace
}
$psCmd = [PowerShell]::Create().AddScript({
@@ -171,9 +183,9 @@ $psCmd = [PowerShell]::Create().AddScript({
-
+
-
+
@@ -213,20 +225,20 @@ $psCmd = [PowerShell]::Create().AddScript({
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -244,13 +256,8 @@ $psCmd = [PowerShell]::Create().AddScript({
################################################## initialisation des variables nécessaires ####################################################
################################################################################################################################################
################################################################################################################################################
-
- ## déclaration des variables windows
- $username_win = "operis.champlan\admin_dom_mts"
- $password_win = ConvertTo-SecureString "Alemax1803!!" -AsPlainText -Force
- $cred_win = New-Object System.Management.Automation.PSCredential($Username_win, $Password_win)
-
- ## déclaration des variables windows
+
+ ## déclaration des variables de connexion Linux
$username_debian = "root"
$password_debian = "Operis!2023#"
@@ -376,16 +383,16 @@ $psCmd = [PowerShell]::Create().AddScript({
}
function test_jetty_win {
- Invoke-Command -ComputerName $nom_machine -ScriptBlock {Get-Service -Name *operis* } -Credential $cred_win
+ Invoke-Command -ComputerName $nom_machine -ScriptBlock {Get-Service -Name *operis* }
}
function redemarrage_jetty_windows {
$test_jetty_init = test_jetty_win
if ($null -ne $test_jetty_init) {
- Invoke-Command -ComputerName $nom_machine -ScriptBlock {Get-Service -Name *operis* |Stop-Service } -Credential $cred_win |Out-Null
+ Invoke-Command -ComputerName $nom_machine -ScriptBlock {Get-Service -Name *operis* |Stop-Service } |Out-Null
$test_arret_jetty = test_jetty_win
if ($test_arret_jetty.Status -like "Stopped") {
- Invoke-Command -ComputerName $nom_machine -ScriptBlock {Get-Service -Name *operis* |Start-Service } -Credential $cred_win
+ Invoke-Command -ComputerName $nom_machine -ScriptBlock {Get-Service -Name *operis* |Start-Service }
$test_reboot_jetty = test_jetty_win
if ($test_reboot_jetty.Status -like "running") {
[System.Windows.Forms.MessageBox]::Show('Redemarrage jetty réussi', 'Warning', 'ok', 'Warning')
@@ -403,6 +410,7 @@ $psCmd = [PowerShell]::Create().AddScript({
function stop_process {
Stop-Process -Id $monPID -Force
}
+
################################################################################################################################################
################################################################################################################################################
######################################################### Fermeture de la fenètre ##############################################################
@@ -410,7 +418,7 @@ $psCmd = [PowerShell]::Create().AddScript({
################################################################################################################################################
$syncHash.Window.Add_Closing({
$_.Cancel = $true
- $Resultat = [System.Windows.Forms.MessageBox]::Show('Voulez-vous fermer lapplication ?', 'Warning', 'YesNo', 'Warning')
+ $Resultat = [System.Windows.Forms.MessageBox]::Show("C'est fini ?", 'Warning', 'YesNo', 'Warning')
If ($Resultat -eq 'Yes')
{
$_.Cancel = $false
@@ -440,11 +448,10 @@ $psCmd = [PowerShell]::Create().AddScript({
$MAJ_GUIRunspace.SessionStateProxy.SetVariable("syncHash",$syncHash)
###WriteToLogFile1 "ouverture runspace enfant ok"
$psScript = [PowerShell]::Create().AddScript({
- ## Corps du runspace
+ # Corps du runspace
function WriteToLogFile2 ($message) {
(Get-Date).ToString() +" - "+ $message >> $global:syncHash.logfilepath
}
- #$todaysdate = Get-Date -Format "dd/mm/yyyy-hh-mm-ss"
$MachinesXML = [xml](get-content $syncHash.Liste_vm )
$Liste_Machines = $MachinesXML.Machine.Serveur
while ($syncHash.tests_en_cours -like $true) {
@@ -802,7 +809,7 @@ $psCmd = [PowerShell]::Create().AddScript({
$label = New-Object System.Windows.Forms.Label
$label.Location = New-Object System.Drawing.Point(10,20)
$label.Size = New-Object System.Drawing.Size(280,20)
- $label.Text = "Arrêts VM: $nom_machine"
+ $label.Text = "Arrêt de la VM $nom_machine ?"
$form.Controls.Add($label)
$form.Topmost = $True
@@ -970,7 +977,10 @@ $psCmd = [PowerShell]::Create().AddScript({
foreach ($selected_item in $global:syncHash.Datagrid_Connexion.SelectedItems)
{
$nom_machine = $selected_item.Serveur
+ ###WriteToLogFile1 "Demande redémarrage jetty sur le serveur : $nom_machine"
$OS_machine = $selected_item.OS
+ ###WriteToLogFile1 "OS du serveur sélectionné: $OS_machine"
+
}
## début définition pop-up de suppression machine ##
Add-Type -AssemblyName System.Windows.Forms
@@ -1000,7 +1010,7 @@ $psCmd = [PowerShell]::Create().AddScript({
$label = New-Object System.Windows.Forms.Label
$label.Location = New-Object System.Drawing.Point(10,20)
$label.Size = New-Object System.Drawing.Size(360,20)
- $label.Text = "redémarrage service jetty (java) de la vm $nom_machine ?"
+ $label.Text = "Redémarrage service jetty (java) de la VM $nom_machine ?"
$form_Remove_machine.Controls.Add($label)
$form_Remove_machine.Topmost = $True
@@ -1062,7 +1072,7 @@ $psCmd = [PowerShell]::Create().AddScript({
$list_snap = Get-VMSnapshot -ComputerName $syncHash.serveur_vm -VMName $nom_machine | Select-Object -Property CreationTime,Name,VMName
$nbr_snap = $list_snap.Count
###WriteToLogFile1 "$nbr_snap snap sur la vm $nom_machine"
- if ($nbr_snap -lt 2 )
+ if ($nbr_snap -lt 2 ) #=> check du nombre max de snapshots
{
foreach ($selected_item in $global:syncHash.Datagrid_Connexion.SelectedItems)
{
@@ -1130,7 +1140,7 @@ $psCmd = [PowerShell]::Create().AddScript({
################################################################################################################################################
################################################################################################################################################
- ######################################################### Restorer Snapshot ####################################################################
+ ######################################################### Restaurer Snapshot ####################################################################
################################################################################################################################################
################################################################################################################################################
$syncHash.BTN_restore_snap.add_click({
@@ -1175,7 +1185,7 @@ $psCmd = [PowerShell]::Create().AddScript({
$label2 = New-Object System.Windows.Forms.Label
$label2.Location = New-Object System.Drawing.Point(10,40)
$label2.Size = New-Object System.Drawing.Size(380,20)
- $label2.Text = "réaliser le $date_Snap"
+ $label2.Text = "Réaliser le $date_Snap"
$form_restore_snap.Controls.Add($label2)
$form_restore_snap.Topmost = $True
@@ -1183,7 +1193,7 @@ $psCmd = [PowerShell]::Create().AddScript({
## fin définition pop-up de restauration Snapshot ##
if ($result -eq [System.Windows.Forms.DialogResult]::OK)
{
- ###WriteToLogFile1 "retour au snapchot $nom_Snap demandé sur la vm : $VM_Snap"
+ ###WriteToLogFile1 "retour au snapshot $nom_Snap demandé sur la vm : $VM_Snap"
# arrêt machine pour éviter un freeze de l'application lors de la restauration du snapshot
Stop-VM -computername $syncHash.serveur_vm -name $nom_machine -Force
# restauration du snapshot
@@ -1245,7 +1255,7 @@ $psCmd = [PowerShell]::Create().AddScript({
$label2 = New-Object System.Windows.Forms.Label
$label2.Location = New-Object System.Drawing.Point(10,40)
$label2.Size = New-Object System.Drawing.Size(380,20)
- $label2.Text = "réaliser le $date_Snap"
+ $label2.Text = "Réaliser le $date_Snap"
$form_suppr_snap.Controls.Add($label2)
$form_suppr_snap.Topmost = $True
@@ -1283,7 +1293,7 @@ $psCmd = [PowerShell]::Create().AddScript({
Add-Type -AssemblyName System.Drawing
$form_rename_snap = New-Object System.Windows.Forms.Form
- $form_rename_snap.Text = "Suppression Snapshot - Support"
+ $form_rename_snap.Text = "Changement nom Snapshot"
$form_rename_snap.Size = New-Object System.Drawing.Size(300,150)
$form_rename_snap.StartPosition = "CenterScreen"
@@ -1334,9 +1344,8 @@ $psCmd = [PowerShell]::Create().AddScript({
###WriteToLogFile1 "Echec renommage snapshot sur la vm $VM_Snap - Aucun snapshot sélectionné"
}
})
-
-
$syncHash.Window.ShowDialog() | Out-Null
+
})
try {
$psCmd.Runspace = $newRunspace