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
А что вы думаете по этому поводу?