Главная

Wednesday, 22 December 2021

PowerShell Direct.

Всем привет.

PowerShell Direct - это новый функционал PowerShell в Windows Server 2016 и Windows 10, позволяющая  создать  прямую локальную PowerShell сессию с любой виртуальной машиной, запущенной на хосте Hyper-V, причем подключение идет не через сеть, а через внутреннюю шину VM bus. Таким образом, администратор  Hyper-V может осуществлять управление ВМ с помощью PowerShell даже на изолированной системе без виртуальных сетевых адаптеров, т.е. можно получить доступ к ВМ которая потеряла связь по сети.

Основные требования для использования Powershell Direct:

  • в качестве хостовой ОС Hyper-V может использоваться Windows Server 2016 или Windows 10 или выше;
  • гостевая ВМ должна быть запущена на том же хосте Hyper-V, с которого осуществляется подключение (т.е. подключение исключительно локальное!);
  • гостевая ОС виртуальной машины также должна быть ОС не ниже Windows Server 2016 или Windows 10;
  • на хосте Hyper-V консоль Powershell должна быть запущена из-под администратора;
  • для подключения к гостевой ОС виртуальной машине нужно будет указать имя пользователя и пароль учетной записи этой ВМ.

Ранее администратор мог выполнять команды на виртуальной машине в Hyper-V только по сети с помощью  Invoke-Command или Enter-PSSession. 

В качестве параметра для подключения к удаленной ВМ нужно указывать ее сетевое имя (-ComputerName) или ее имя в Hyper-V (-VMName).

$cred = Get-Credential

К примеру, получить список запущенных процессов на удаленном сервере можно так:

Invoke-Command -VMName "TEST01" -ScriptBlock {Get-Process} -Credential $cred

Или создать новую интерактивную PS сессию с удаленным сервером:

Enter-PSSession -VMName "TEST01" -Credential $cred

В таком сценарии PS сессию нельзя было установить с ВМ, отключенной от виртуального коммутатора, находящейся в изолированной или защищенной файрволом системе. Все управление осуществляется только через графическую консоль Hyper-V. Для подключения к такой гостевой ВМ с помощью Powershell Direct используется не сетевое имя гостевой ОС, а имя или GUID ВМ в среде Hyper-V. При подключении через Powershell Direct также можно использовать Enter-PSSession для создания интерактивного сеанса Powershell, либо Invoke-Command для запуска одной команды или скрипта.

Получим список ВМ на хосте Hyper-V: 

Get-VM | Select Name

Запустим интерактивную PowerShell сессию: 

Enter-PSSession -VMName "TEST01" -Credential $cred

Для завершения сессии выполним: Exit-PSSession

Для запуска одной команды или скрипта воспользуемся Invoke-Command.

Сначала узнаем VMId.

Get-VM -VMName "TEST01" -Verbose | Select id, ComputerName

Invoke-Command -VMId 58b10504-e6ab-4ff5-9a74-7442c3d8a4a3 -FilePath d:\1.ps1 -Credential $cred

Например, если вам нужно скопировать некий файл на изолированную ВМ через Powershell Direct, воспользуемся следующим сценарием.

Создадим новую сессию PSSession1:

$PSSession1 = New-PSSession -VMId 58b10504-e6ab-4ff5-9a74-7442c3d8a4a3 -Credential $cred

Скопируем файл на виртуальную машину:

Copy-Item -ToSession $PSSession1 -Path C:\win10.iso  -Destination  D:\ISO\

Скопируем файл с ВМ:

Copy-Item -FromSession $PSSession1 -Path C:\result_ data.txt -Destination C:\vm_data\

Еще раз обращаю ваше внимание, что PS Direct работает только с HyperV хоста и только с теми ВМ которые на этом же HyperV живут.

Успехов.


No comments:

Post a Comment

А что вы думаете по этому поводу?