2016-06-29 3 views
0

Ich schreibe ein Skript auf HYPER-V-Host für VM-Gastinformationen zu erhalten. Gibt es eine Möglichkeit, den Namen des VM-Betriebssystems mithilfe von Powershell von Hyper-V zu erhalten?Gibt es eine Möglichkeit, den Namen des VM-Betriebssystems mithilfe von Powershell von Hyper-V zu erhalten?

Es gibt mehrere Beispiele, die (Get-WmiObject Win32_OperatingSystem -ComputerName $vmName).name verwenden, aber ich sollte diese Informationen direkt von Hyper-V aufgrund von Domäneneinschränkungen erhalten.

Auch ich benutze Hyper-V-Modul von Powershell, aber ich konnte keine Cmdlets im Zusammenhang mit OS zu sehen.

+0

Haben Sie bereits die [Msvm_VirtualSystemManagementService-Klasse] (https://msdn.microsoft.com/en-us/library/hh850062 (v = V.85) .aspx) betrachtet? – vonPryz

Antwort

1

Dies könnte aus Gast-Intrinsic-Austausch-Artikel abgerufen werden.

# Filter for parsing XML data 
filter Import-CimXml 
{ 
    # Create new XML object from input 
    $CimXml = [Xml]$_ 
    $CimObj = New-Object -TypeName System.Object 

    # Iterate over the data and pull out just the value name and data for each entry 
    foreach ($CimProperty in $CimXml.SelectNodes("/INSTANCE/PROPERTY[@NAME='Name']")) 
     { 
     $CimObj | Add-Member -MemberType NoteProperty -Name $CimProperty.NAME -Value $CimProperty.VALUE 
     } 

    foreach ($CimProperty in $CimXml.SelectNodes("/INSTANCE/PROPERTY[@NAME='Data']")) 
     { 
     $CimObj | Add-Member -MemberType NoteProperty -Name $CimProperty.NAME -Value $CimProperty.VALUE 
     } 

    # Display output 
    $CimObj 
} 

# Prompt for the Hyper-V Server to use 
$HyperVServer = Read-Host "Specify the Hyper-V Server to use (enter '.' for the local computer)" 

# Prompt for the virtual machine to use 
$VMName = Read-Host "Specify the name of the virtual machine" 

# Get the virtual machine object 
$query = "Select * From Msvm_ComputerSystem Where ElementName='" + $VMName + "'" 
$Vm = gwmi -namespace root\virtualization\v2 -query $query -computername $HyperVServer 

# Get the KVP Object 
$query = "Associators of {$Vm} Where AssocClass=Msvm_SystemDevice ResultClass=Msvm_KvpExchangeComponent" 
$Kvp = gwmi -namespace root\virtualization\v2 -query $query -computername $HyperVServer 

Write-Host 
Write-Host "Guest KVP information for" $VMName 

# Filter the results 
try { 
    $Kvp.GuestIntrinsicExchangeItems | Import-CimXml | where Name -eq "OSName" 
} 
catch { 
    Write-Host "Not found" 
} 

Von Ben Armstrong’s Virtualization Blog.

+0

Das ist wirklich eine gute Antwort. Aber es wird nicht funktionieren, wenn die VM heruntergefahren ist, da keine der Lösungen funktioniert, wenn die Maschine ausgefallen ist. +1 –

1

Sofern Sie SCVMM nicht verwenden, sind Gastbetriebssystemdetails nicht über Hyper-V PowerShell-Cmdlets verfügbar.

Sie müssen den Gast selbst abfragen, wie Sie bereits gefunden haben.

Verwandte Themen