如何通过Powershell来了解在HyperV VM中运行的操作系统

所以这里是环境。
主持人:Windows 10
嘉宾:Server 2012和Server 2016
目的:在开发过程中自动将构build推送到服务器进行testing的开发系统。

我有一个Powershell函数作为这个完整的构build脚本的一部分,为我将要使用的VM获取远程PSSession。 由于虚拟机是从基本系统dynamic克隆的,在这一点上我不知道虚拟机的操作系统是什么。

如果是2016年的虚拟机,我宁愿使用Powershell Direct来连接虚拟机。

$session = New-PSSession -VMName $VMName -Credential $VMCredentials 

如果是2012年,我必须回到networking上的WinRM会话。 我有代码来获取IP并build立连接。 它工作正常。

  $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年)还是基于WinRMnetworking的连接(2012年和更早版本)。

我的想法是,Hyper-V cmdlet必须有一些方法来告诉VM中的操作系统。 也许不会。 我也接受其他的解决方法。 谢谢!

不幸的是, Get-VM cmdlet并没有给你任何关于guest虚拟机运行的操作系统的细节。 由于您试图查明客户操作系统是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