Итак, вот среда.
Хост: Windows 10
Гости: Server 2012 и Server 2016
Назначение: Система разработки для автоматизации отправки сборок на серверы для тестирования во время разработки.
У меня есть функция Powershell как часть этого сценария полной сборки, которая получает удаленный сеанс PSSession для виртуальной машины, с которой я собираюсь работать. Поскольку виртуальная машина динамически клонируется из базовой системы, на данный момент я не знаю, что такое ОС в виртуальной машине.
Если это виртуальная машина 2016 года, я бы предпочел использовать Powershell Direct для подключения к виртуальной машине.
$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 должны каким-то образом определять, какая ОС находится В виртуальной машине. Может быть нет. Я открыт и для других способов решения этой проблемы. Спасибо!
К несчастью Get-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
.