如何使用 Powershell 判斷 HyperV VM 中正在執行的作業系統
所以這裡是環境。
主機:Windows 10
訪客:Server 2012 和 Server 2016
目的:開發系統可自動將建構推送到伺服器以在開發期間進行測試。
我有一個 Powershell 函式作為這個完整建構腳本的一部分,它為我將要使用的 VM 獲取遠端 PSSession。由於虛擬機是從基本系統動態複製的,所以此時我不知道虛擬機中的作業系統是什麼。
如果是 2016 年的 VM,我寧願使用 Powershell Direct 連接到 VM。
$session = New-PSSession -VMName $VMName -Credential $VMCredentials
如果是 2012 年,我必須通過網路回退到 WinRM 會話。我有獲取 IP 並建立連接的程式碼。它工作正常。
$vm = Get-Vm -Name $VMName $ips = New-Object System.Collections.Generic.List[System.String] foreach ($adapter in $vm.NetworkAdapters) { foreach ($ip in $adapter.IPAddresses) { if($ip -like '*.*') { $ips.Add($ip) } } } $session = New-PSSession -ComputerName $ips[0] -Authentication Negotiate -Credential $VMCredentials
我需要知道如何判斷我應該執行 Powershell Direct(僅限 2016)還是基於 WinRM 網路的連接(2012 及更早版本)。
我的想法是 Hyper-V cmdlet 必須有某種方式來判斷 VM 中的作業系統。也許不吧。我也對解決這個問題的其他方法持開放態度。謝謝!
不幸
Get-VM
的是,cmdlet 沒有為您提供有關來賓 VM 正在執行的作業系統的任何詳細資訊。由於您試圖確定來賓作業系統是 Windows Server 2016 還是 Windows Server 2012,您可以使用它Get-WMIObject
來檢索該確切資訊。使用以下命令應該可以返回版本號:
Get-WMIObject -Class Win32_OperatingSystem -ComputerName $VMName -Credential $VMCredentials | Select-Object *Version -ExpandProperty Version*
Windows 2012 是版本
6.3.x
,而 Windows 2016 是版本10.0.x
。