Acces à des variables ou les noms sont stockés dans un fichiers
Bonjour tout le monde,
Voici mon problème, j’écris un script qui permet de récupérer les statistiques sur un vCenter. Dans un soucis de configuration et de simplicité sur le long terme, j'essaye d’accéder a des variables de manière dynamique.
Code:
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
|
###Variables
$TabResult_Infos=@()
$TabInfos=@()
$File_Infos=Get-Content -Path C:\infos.txt
$VMs=Get-VM -Name * -WarningAction SilentlyContinue
foreach ($Info in $File_Infos){
$TabInfos+=$Info
}
$Object=$TabInfos
#Region Init tab
$Pso_Init = New-Object psobject
ForEach ($Line in $Object){
Add-Member -Value "Init" -Name $Line -MemberType NoteProperty -InputObject $Pso_Init
}
$TabResult_Infos+=$Pso_Init
#EndRegion
# Variable pour la barre de progression
$i=0
$incre=100/$VMs.Count
foreach ($VM in $VMs){
$i=$i+$incre
Write-Progress -Activity "Récupération des données ..." -CurrentOperation $VM.Name -PercentComplete $i -Status "En cours "
###Creation du tableau des infos générales
$Pso_Infos = New-Object psobject
foreach ($Info in $TabInfos){
if ($Info -eq "DatastoreIdList"){
switch (($VM.DatastoreIdList)[0]){
"Datastore-datastore-2853" { Add-Member -Value "NFS-STO-001-PROD" -Name "DatastoreIdList" -MemberType NoteProperty -InputObject $Pso_Infos }
"Datastore-datastore-2852" { Add-Member -Value "NFS-STO-002-PROD" -Name "DatastoreIdList" -MemberType NoteProperty -InputObject $Pso_Infos }
default { Add-Member -Value "Autres" -Name "DatastoreIdList" -MemberType NoteProperty -InputObject $Pso_Infos }
}
}
else{
Add-Member -Value $VM.$Info -Name $info -MemberType NoteProperty -InputObject $Pso_Infos
}
}
$Pso_Infos.Notes=$Pso_Infos.Notes -replace "\n",""
$TabResult_Infos+=$Pso_Infos
} |
Le fichier texte "info.txt" ressemble a ceci :
Name
DatastoreIdList
Folder
NumCpu
MemoryGB
PowerState
Guest.OSFullName
Guest.State
J'arrive a accéder aux propriétés qui sont directement en dessous de $VM, cependant les propriétés comme Guest.OSFullName ne sont pas accessible, je n'ai pas d'erreur, mais rien ne s'affiche.
>$Info="PowerState"
>$VM.$Info
>PoweredOn
>$Info="Guest.OSFullName"
>$VM.$Info
>
J'espère avoir été compréhensible !
D'avance Merci !
MB