From 65986424365a340b4c45740bc11ae9497bff04d0 Mon Sep 17 00:00:00 2001 From: Ichbinus <151060943+Ichbinus@users.noreply.github.com> Date: Thu, 30 Nov 2023 17:51:54 +0100 Subject: [PATCH] Add files via upload --- supervision_v4.0.ps1 | 1350 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 1350 insertions(+) create mode 100644 supervision_v4.0.ps1 diff --git a/supervision_v4.0.ps1 b/supervision_v4.0.ps1 new file mode 100644 index 0000000..4cb995e --- /dev/null +++ b/supervision_v4.0.ps1 @@ -0,0 +1,1350 @@ +<# +.SYNOPSIS +Interface de supervision des machines virtuelles du service support +.DESCRIPTION +Auteur : Maxime Tertrais +Date creation : 27/11/2023 +/Dernier modificateur : Maxime Tertrais +Date derniere modification : +Ce script permet de superviser les machines virtuelles du service support: + - gestion des machines: + - démarrer, arréter 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 : +# : ligne de commentaire +### : ligne de debug (les logs) + +.EXAMPLE +exemple1 : .\supervision +.NOTES +Des améliorations pourraient etre apportées : + - +#> + +################################################################################################################################################ +################################################################################################################################################ +###################################################### Définition variable pour les logs ####################################################### +################################################################################################################################################ +################################################################################################################################################ +$logfilepath = ".\Logs_supervision_vm_v4.0.log" +function WriteToLogFile0 ($message) { + (Get-Date).ToString() +" - "+ $message >> $logfilepath +} + +if(Test-Path $logfilepath) +{ + Remove-Item $logfilepath +} +###WriteToLogFile0 "Id du process ouvert $monPID " + +################################################################################################################################################ +################################################################################################################################################ +################################################# Assembly nécessaire pour la fenêtre graphique ################################################ +################################################################################################################################################ +################################################################################################################################################ +try { + $assembly_list = "PresentationFramework","System.Windows.Forms","PresentationCore","WindowsBase","System.Xaml","UIAutomationClient","UIAutomationTypes","WindowsFormsIntegration","System","System.Core","mscorlib","System.Management.Automation","System.Threading" + foreach ($assembly in $assembly_list) + { + # Chargement des assemblies + Add-Type -AssemblyName $assembly + # Test des assemblies chargées + $loadedAssemblies = [System.AppDomain]::CurrentDomain.GetAssemblies()| Where-Object { $_.GetName().Name -eq $assembly } + $assemblyLoaded = $loadedAssemblies.FullName -contains $assembly + if ($null -ne $assemblyLoaded) { + $logassembly = "L'assembly '$assembly' est chargé correctement." + WriteToLogFile0 $logassembly + } else { + $logassembly = "L'assembly '$assembly' n'est pas chargé correctement." + 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 + } +} +catch { + $logwpf = "ligne 55 - une exeption s'est produite $_.Exception.Message " + 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 + + +################################################################################################################################################ +################################################################################################################################################ +############################## Déclaration de la Hash table qui sera synchronisée entre les différents runspaces ############################### +################################################################################################################################################ +################################################################################################################################################ + +try { + # création de la table de hachage synchronisé + $syncHash = [hashtable]::Synchronized(@{}) + # 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 + } else { + $loghashtabl = "Il y a eu un problème lors de la création de l'hashtable synchronisé." + WriteToLogFile0 $loghashtabl + } +} +catch { + $loghashtabl = "ligne 93 - une exeption s'est produite $_.Exception.Message " + WriteToLogFile0 $loghashtabl +} + +################################################################################################################################################ +################################################################################################################################################ +############################################ Déclaration du premier runspace pour l'interface graphique ######################################## +################################################################################################################################################ +################################################################################################################################################ +try { + $newRunspace =[runspacefactory]::CreateRunspace() + $newRunspace.ApartmentState = "STA" ## Le STA est là pour l'interface en WPF + $newRunspace.ThreadOptions = "ReuseThread" + $newRunspace.Open() + $newRunspace.SessionStateProxy.SetVariable("syncHash",$syncHash) + # vérification création du Runspace + if ($newRunspace.ApartmentState -like "STA") + { + $logrunspace1 = "le runspace créé avec un ApartmentState correct en STA ." + WriteToLogFile0 $logrunspace1 + }else { + $logrunspace1 = "le runspace créé avec un ApartmentState incorrect ." + WriteToLogFile0 $logrunspace1 + } + if ($newRunspace.ThreadOptions -like "ReuseThread") + { + $logrunspace2 = "le runspace créé avec un ThreadOptions correct en ReuseThread ." + WriteToLogFile0 $logrunspace2 + }else { + $logrunspace2 = "le runspace créé avec un ThreadOptions incorrect ." + 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 + }else { + $logrunspace3 = "le runspace créé avec un SessionStateProxy incorrect ." + WriteToLogFile0 $logrunspace3 + } +} +catch { + $logdeclarunspace = "ligne 137 - une exeption s'est produite $_.Exception.Message " + WriteToLogFile0 $logdeclarunspace +} + +$psCmd = [PowerShell]::Create().AddScript({ + ################################################################################################################################################ + ################################################################################################################################################ + ############################################ Déclaration du code XAML de l'interface graphique WPF ############################################# + ################################################################################################################################################ + ################################################################################################################################################ + [xml]$Fenetre_principale = @" + + + + + + +