Powershell

如何使用 Powershell 判斷 HyperV VM 中正在執行的作業系統

  • July 27, 2018

所以這裡是環境。

主機: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

引用自:https://serverfault.com/questions/874684