PowerShell Direct в Hyper-V 2016

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).

Наприклад, отримати список запущених процесів на віддаленому сервері можна так:
Invoke-Command -ComputerName WS16-Core -ScriptBlock Get-Process

Або створити нову інтерактивну PS сесію з віддаленим сервером:
Enter-PSSession -ComputerName WS16-Core

У такому сценарії PS сесію не можна було встановити з ВМ, відключеною від віртуального комутатора, що знаходиться в ізольованій або захищеною файрволом системі. Все управління здійснюється тільки через графічну консоль Hyper-V.

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

  1. Отримаємо список ВМ на хості Hyper-V: Get-VM | Select Name
  2. Запустимо інтерактивну PowerShell сесію: Enter-PSSession -VMName "win10 Compact PSDirect" -Credential (Get-Credential)
  3. Для завершення сесії виконайте: Exit-PSSession

Для запуску однієї команди або скрипта скористаємося Invoke-Command:

Invoke-Command -VMId -FilePath C: \ script \ some_script.ps1

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

Створимо нову сесію PSSession1:

$ PSSession1 = New-PSSession -VMId -Credential (Get-Credential)

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

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

Скопіюємо файл з ВМ:

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

Як ви бачите, використовувати Powershell Direct досить просто і зручно. Як і більшість інших нововведень в Windows Server 2016, Powershell Direct орієнтований в першу чергу на поліпшення функціоналу системи з точки зору сервісних / хмарних провайдерів, що надають сервіс віртуальних машин.