2016-06-29 25 views
0

我正在HYPER-V主機上寫腳本來獲取虛擬機的訪客信息。有沒有辦法使用PowerShell從Hyper-V獲取虛擬機操作系統名稱?有沒有辦法使用PowerShell從Hyper-V獲取VM的操作系統名稱?

有幾個例子使用(Get-WmiObject Win32_OperatingSystem -ComputerName $vmName).name,但我應該直接從Hyper-V獲取這些信息,因爲域限制。

此外,我正在使用PowerShell的hyper-v模塊,但我看不到任何有關操作系統的cmdlet。

+0

你看過[Msvm_VirtualSystemManagementService class](https://msdn.microsoft.com/en-us/library/hh850062(v = vs.85).aspx)了嗎? – vonPryz

回答

1

這可以從客人內在交換項目中檢索。

# 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" 
} 

Ben Armstrong’s Virtualization Blog

+0

這真是個好答案。但是如果虛擬機停機,它將無法工作,因爲事實上如果機器停機,任何解決方案都無法工作。 +1 –

1

除非您使用SCVMM,否則通過Hyper-V PowerShell cmdlet無法使用Guest OS詳細信息。

你必須像你已經找到的那樣查詢訪客本身。

相關問題