Powershell
如何使用 PowerShell 在 Hyper-V 上獲取 Windows 2008 R2 VM 的 IP 地址?
我創建了一個自動建構腳本來在 Hyper-V 2016 上建構新的虛擬機。我有時需要一個 2008 R2 虛擬機,我獲取 IP 地址以連接到我的 2012 R2/2016 虛擬機的方法是使用一些 powershell,例如:
get-vm -Name $VMName|Get-VMNetworkAdapter|Select-Object -ExpandProperty IpAddresses
適用於 2012/2016,但返回一個帶有 2008 R2 VM 的空數組。關於如何使用 Powershell 從 Hyper-V 獲取 IP 地址的任何想法?該腳本從 Windows 10 工作站執行。
編輯
我嘗試
get-vm -name $VMName|Get-WmiObject -Class Win32_NetworkAdapterConfiguration
作為測試並在大量適配器輸出後得到了這個:Get-WmiObject :輸入對像不能綁定到命令的任何參數,因為命令不接受管道輸入,或者輸入及其屬性與接受管道輸入的任何參數都不匹配。
解決方案
這就是我最終做的事情:
$VMName = <the name of my vm> Invoke-Command -Session $VMHostSession -ScriptBlock { $Vm = Get-WmiObject -Namespace root\virtualization\v2 -Query "Select * From Msvm_ComputerSystem Where ElementName='$using:VMName'"; $vm.GetRelated("Msvm_KvpExchangeComponent").GuestIntrinsicExchangeItems | % { ` $GuestExchangeItemXml = ([XML]$_).SelectSingleNode("/INSTANCE/PROPERTY[@NAME='Name']/VALUE[child::text()='NetworkAddressIPv4']"); if ($GuestExchangeItemXml -ne $null) { $GuestExchangeItemXml.SelectSingleNode("/INSTANCE/PROPERTY[@NAME='Data']/VALUE/child::text()").Value; } } }
您可以為此使用 WMI。也許 2008R2 沒有你要找的領域。
get-vm -Name $VMName | Get-WmiObject -Class Win32_NetworkAdapterConfiguration -computername $_ | select-object IPAddress
如果您有多個網卡,您可能還需要對您選擇的網卡進行一些過濾。您可能還需要檢查 get-vm 正在輸出什麼,因為我不確定它是否會直接通過管道傳輸到 get-wmiobject。您可能需要將其通過管道傳輸到 foreach-object 並以這種方式檢索電腦名。
編輯
get-vm -Name $VMName | foreach-object { Get-WmiObject -Class Win32_NetworkAdapterConfiguration -computername $_.name } | select-object IPAddress
希望這可以幫助。
謝謝,蒂姆。