Question obtenir des détails vm sur un certain nombre d'hôtes sur le réseau

Plus d'informations
il y a 1 an 6 mois - il y a 1 an 6 mois #32590 par boulbul
Merci pour votre retour,

J'ai fait quelques progrès sur le script et j'aimerais votre aide sur un point.

J'ai réussi à exporter via le module exportExcel, cependant… Toutes les sorties de la variable « Nic_IPAddresses », « VM_HD_Size » et « VM_HD_Location » sont vides ou ont une valeur de « stem.string ».

Voici le code :

Get-VM | 
ForEach-Object {
    $VM = $_  # this variable assignment makes the current pipeline object available inside the nested loop
    $NicList = $_.NetworkAdapters
    foreach ($Nic in $NicList) {
        [PSCustomObject]@{
            ComputerName      = $VM.ComputerName
            Host_OS           = (Get-WMIObject win32_operatingsystem).caption #|Select "Local Area Connection* 1" 
            Host_IP           = (Get-NetAdapter ) 
            #Host_IP          = (Get-NetIPAddress  -AddressFamily IPv4 -InterfaceAlias "Local Area Connection* 1" |select -Property IPAddress)
            Nic_IPAddresses   = $Nic.IPAddresses 
            VM_Name           = $VM.Name
            Nic_MacAddress    = $Nic.MacAddress
            VM_CreationTime   = $VM.CreationTime
            VM_MemoryAssigned = $VM.MemoryAssigned # to write in MB
            VM_ID             = $VM.VMId
            VM_HD_Size        = $VM.VMId |Get-VHD| select Size , {$_.Size /1GB} # to filter this output in order to get just VM_HD_Location
            VM_State          = $VM.State
            Nic_Name          = $Nic.Name
            VM_HD_Location    = $VM.VMId |Get-VHD | Select Path # to filter this output in order to get just VM_HD_Location
            
        }
    }
} | Export-Excel -Path C:\temp\allvms.xls


Voici à la fois la sortie du script et la redirection ver le fichier Excel.

Sortie du code:

ComputerName      : Boulbul
Host_OS           : Microsoft Windows 10 Professionnel
Nic_IPAddresses   : {169.254.12.49, fe80::d13c:2319:ac06:c31}
VM_Name           : DCVM
Nic_MacAddress    : 00155D6A2A03
VM_CreationTime   : 21/08/2022 13:02:55
VM_MemoryAssigned : 771751936
VM_ID             : 81de770f-54cb-4d1a-beed-097e0cc1155a
VM_HD_Size        : @{Size=128849018880; $_.Size /1GB=120}
VM_State          : Running
Nic_Name          : Carte réseau
VM_HD_Location    : @{Path=C:\Users\Boulbul\Documents\Hyper-v\test1\test1_2017231E-A852-4812-9505-18843E929DC5.avhdx}

ComputerName      : Boulbul
Host_OS           : Microsoft Windows 10 Professionnel
Nic_IPAddresses   : {}
VM_Name           : Nouvel ordinateur virtuel
Nic_MacAddress    : 00155D6A2A06
VM_CreationTime   : 23/08/2022 16:24:47
VM_MemoryAssigned : 1073741824
VM_ID             : c1b89c96-d5a5-4c61-b63c-232d2133f192
VM_HD_Size        : 
VM_State          : Running
Nic_Name          : Carte réseau
VM_HD_Location    : 

ComputerName      : Boulbul
Host_OS           : Microsoft Windows 10 Professionnel
Nic_IPAddresses   : {169.254.119.5, fe80::bcb4:2f:f8df:7705}
VM_Name           : test2
Nic_MacAddress    : 00155D6A2A04
VM_CreationTime   : 21/08/2022 13:03:29
VM_MemoryAssigned : 824180736
VM_ID             : 83551f8f-59e3-4681-bf5d-0f76c940a333
VM_HD_Size        : @{Size=128849018880; $_.Size /1GB=120}
VM_State          : Running
Nic_Name          : Carte réseau
VM_HD_Location    : @{Path=C:\Users\Boulbul\Documents\Hyper-v\test2\test2_1CBB8966-2F01-469F-B8AE-AB55CECE8650.avhdx}



Excel file: (voir fichier joint)


Merci d'avance.

Cordialement,

boulbul
 
Pièces jointes :
Dernière édition: il y a 1 an 6 mois par boulbul.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 1 an 6 mois - il y a 1 an 6 mois #32591 par Laurent Dardenne
Pour 'System.String' la propriété est un tableau, dans la console on peut parfois voir le contenu mais dans les export le plus souvent 'on' transforme l'objet en string :
[System.String[]]$Tab=@('un','deux','trois')
$tab.Tostring()
#System.String
[System.Int32[]]$Tab=@(1..5)
$tab.Tostring()
#System.Int32
Donc pour les propriétés contenant un tableau de scalaires ( objet simple: int, chaine,double, boolean etc) on peut faire ceci :
[System.String[]]$Tab=@('un','deux','trois')
$tab -Join ','
#un,deux,trois

Pour les propriétés contenant un objet (VM_HD_Size) ou un tableau d'objet cela demande bcp plus de code.
Pour les chaînes vide, je ne sais pas n'ayant pas les données à portée de clavier :-)
Vérifie ce que renvoie $objet.Propriété.ToString().
Tu peux aussi analyser le type de ces propriétés avec Get-Member :
$objet.Propriété|get-member
#ou
$objet.Propriété.GetType().FullName


Essaie :
VM_HD_Location = $VM.VMId |Get-VHD | Select -ExpandProperty Path

Ici par défaut Select-Object renvoie un objet avec une propriété, -ExpandProperty renvoie le contenu de la propriété et pas un nouvel objet avec une seul propriété.

Il s'agit de détails plomberie interne à .Net, mais à un moment donné on est bien obligé de les connaitre pour résoudre ce type de traitement.[/code][/code]

Tutoriels PowerShell
Dernière édition: il y a 1 an 6 mois par Laurent Dardenne. Raison: balise code

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 1 an 6 mois - il y a 1 an 6 mois #32592 par Laurent Dardenne
Pour les chaînes vides, c'est dû au comportement d'un objet personnalisé crée par Select-Object.
Exemple :
$p=get-process powershell|Select-Object Processname,Id
$p[0].tostring() -eq [string]::empty
#True
"Transformation par Powershell $($p[1])"
#{Transformation par PS @{ProcessName=powershell; Id=25992}

Par défaut sa méthode ToString() ne renvoei rien et si on demande sa substitution dans une chaîne, Powershell utilise un formatage spécifique.

Tutoriels PowerShell
Dernière édition: il y a 1 an 6 mois par Laurent Dardenne.

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.085 secondes
Propulsé par Kunena