1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139
|
#Liste de référence provenant de l'AD ?
#supposée sans doublon
[string[]]$script:All_vms=@(
'wgf497',
'wk8542',
'whhn03',
'waarr4',
'wca698'
)
[string[]]$ZCM_vm=@(
'wgf497',
'wk8542',
'wca698',
'wd3415',
'wd3416'
)
[string[]]$AppSens_vm=
@(
'wgf497',
'wk8542',
'whhn03',
'wd3415',
'wd3417'
)
#requiert ps v5.0
enum VMEnvironment {
ZCM
AppSens
}
#Les noms des environnements sont définis dans une énumération.
$EnvironmentNames=@( [System.Enum]::GetValues([VMEnvironment]) )
Function New-VMInfo{
#crée un objet portant le nom de la VM et
# les noms des environnements à tester.
#Note : dépend de l'énumération [VMEnvironment].
param(
[Parameter(Mandatory=$True,position=0)]
[string]$Name
)
$Properties=@{
PSTypeName='VMInfo';
Name=$Name;
isUnknown=$false #Par défaut la VM est présente dans la liste de référence.
WriteErrorStream=$false # Propriété optionnel, facilite la visualisation des VMs inconnues dans la console
}
#Par défaut la VM n'existe pas dans tous les environnements déclarés.
#Les noms des propriétés sont identique aux noms des environnements.
foreach ($Name in $EnvironmentNames)
{ $Properties.Add($Name,$false) }
[PSCustomObject]$Properties
}# New-VMInfo
#Hashtable de recherche doccurrence.
#En fin de traitement elle contiendra tous les noms de VM rencontrés :
# celles présentes dans la liste de référence et celles absentes (inconnues).
$script:Search_vm=@{}
foreach ($vmName in $script:All_vms){
#Le nom de VM est la clé de la hashtable à laquelle
# on associe un objet personnalisé.
$script:Search_vm.Add($vmName, (New-VMInfo -Name $vmName))
}
Function Compare-Environnement{
#Compare la liste des VMs d'un environnement avec la liste de référence
#Attention dépendance sur $All_vms et $Search_vm
param (
[string[]] $List,
[VMEnvironment]$Environment
)
$Comparaison=Compare-Object -ReferenceObject $script:All_vms -DifferenceObject $List -IncludeEqual
foreach ($Item in $Comparaison)
{
$Key=$Item.InputObject
switch ($Item.SideIndicator)
{
'==' {
#La vm est connue, valide sa présence dans l'environnement indiqué
$script:Search_vm.$Key.$Environment=$True
break;
}
#'<=' {
#La vm est connue, son absence dans l'environnement indiqué est déjà à $true
# }
'=>' {
#La vm est inconnue dans le liste de référence mais présente dans un environnement
#on réutilise $Search_vm pour mémoriser cette information
if (-not $script:Search_vm.Contains($Key))
{
$VM_Unknown=New-VMInfo -Name $Key
$VM_Unknown.isUnknown=$True
$VM_Unknown.$Environment = $VM_Unknown.WriteErrorStream=$True
$script:Search_vm.Add($Key, $VM_Unknown)
Write-Error "VM Inconnue:'$Key'"
}
else
{
#La vm est inconnue, on valide sa présence dans l'environnement indiqué
$script:Search_vm.$Key.$Environment=$True
}
}
}
}
} #Compare-Environnement
Compare-Environnement -List $ZCM_vm -Environment 'ZCM'
Compare-Environnement -List $AppSens_vm -Environment 'AppSens'
#Récupère un tableau d'objets
$Rapport=$Search_vm.GetEnumerator()|Foreach-Object {$_.Value}
$Rapport
#paramètre l'affichage des propriétés, toutes sauf WriteErrorStream
$AllPropertiesExcept='Name','isUnknown'+$EnvironmentNames
Update-TypeData -TypeName VMInfo -DefaultDisplayPropertySet $AllPropertiesExcept
$Rapport
#2 groupes connue et inconnue
$Groupes=$Rapport|Group-object -Property isUnknown
$Groupes
#fichier csv -> Excel
$Rapport|Export-CSV 'c:\temp\Audit-Vm.txt' -Delimiter ';' |