Дистанційне взаємодія в середовищі powershell 2

У версії Windows PowerShell 2.0 реалізований альтернативний механізм підключення до віддалених комп'ютерів, іменований remoting (віддалене взаємодія). Цей механізм використовує кошти служби дистанційного керування Windows (Windows Remote Management, WinRM). Він забезпечує підключення до віддаленого комп'ютера, а також запуск команд, які виконуються на цьому віддаленому комп'ютері

ІТ-інфраструктура для вашого підприємства

Розробка оболонки PowerShell 1.0 стала справжнім проривом у розвитку засобів управління і автоматизації Windows XP, а також більш пізніх версій платформи ОС Windows. Базована на платформі. NET Framework технологія PowerShell 1.0 включає в себе однакову структуру команд (cmdlets), вона наділена потужними вбудованими засобами форматування вихідних даних і забезпечує значне підвищення доступності інших технологій, і перш за все - інструментарію управління Windows (WMI). Однак, хоча деякі складові команди PowerShell 1.0 і об'єкти. NET можуть підключатися до віддалених комп'ютерів, ця функція реалізується диференційовано, залежно від конкретного випадку. Команди, що підтримують віддалені з'єднання, мають параметр -ComputerName; крім того, при встановленні з'єднань вони використовують або виклики віддалених процедур (RPC), або модель DCOM.

У багатьох ситуаціях RPC і DCOM добре справляються з завданнями управління, однак при виконанні процедур діагностики і при виявленні причин неполадок часом виникають проблеми. Наприклад, команда Get-Service може зчитувати дані служб з віддаленого комп'ютера за допомогою параметра -ComputerName, проте ця команда не має параметра -Credential, і тому для її виконання слід зареєструватися з обліковим записом, що має дозвіл на доступ до віддаленої системи.

Але вже в версії Windows PowerShell 2.0 реалізований альтернативний механізм підключення до віддалених комп'ютерів, іменований remoting (віддалене взаємодія). Цей механізм використовує кошти служби дистанційного керування Windows (Windows Remote Management, WinRM). Він забезпечує підключення до віддаленого комп'ютера, а також запуск команд, які виконуються на цьому віддаленому комп'ютері. Поясню сказане на прикладі. Засоби підключення до віддаленого робочого столу ставляться до графічного інтерфейсу користувача так само, як віддалене взаємодія до командного рядка оболонки PowerShell. Коли ви запускаєте складову команду з використанням механізму віддаленого взаємодії, команда фактично виконується на віддаленому комп'ютері, але отримані результати ви можете бачити на локальній машині.

Де можна отримати Windows PowerShell 2.0

Включення функції віддаленого взаємодії

Для того щоб комп'ютер міг встановлювати з'єднання з віддаленими системами, на яких встановлена ​​оболонка PowerShell, необхідно забезпечити такі умови.

Якщо комп'ютер не буде приймати з'єднання від оболонок PowerShell, встановлених на віддалених комп'ютерах, виконання зазначених умов необов'язково.

Виконання однієї команди на віддаленому комп'ютері

Найпростіший спосіб підключитися до середовища PowerShell на віддаленому комп'ютері - скористатися командою Enter-PSSession. За замовчуванням ця команда виконується з параметром -ComputerName, тому при її введенні з клавіатури даний параметр можна не вказувати. Наприклад, для встановлення з'єднання з віддаленим комп'ютером з ім'ям rigel треба ввести з клавіатури

Зверніть увагу: для повноти картини я включаю в текст запрошення. Вам же не потрібно вводити запрошення як частина команди.

Після того як ви введете дистанційний сеанс, синтаксис запрошення PowerShell зміниться. Тепер воно буде включати в себе укладену в квадратні дужки ім'я віддаленого комп'ютера; це буде означати, що ви встановили з'єднання з віддаленим комп'ютером. В даному випадку запрошення буде виглядати так:

Після встановлення дистанційного підключення все команди, введені вами в командному рядку, будуть виконуватися на віддаленій машині. Так, якщо ви введете команду

команда Get-ChildItem буде виконана на віддаленій машині. Її вихідні дані будуть містити імена файлів і папок, що зберігаються в накопичувачі C віддаленого комп'ютера. Щоб завершити сеанс віддаленого взаємодії, скористайтеся командою Exit-PSSession

Виконання блоку сценарію (Scriptblock) на віддаленому комп'ютері

Віддалене взаємодія за допомогою PowerShell дозволяє виконувати на віддаленому комп'ютері блок сценарію, або scriptblock (тобто блок коду PowerShell, укладений у фігурні дужки). Для цього потрібно скористатися командою Invoke-Command з параметром -ComputerName. Наприклад, в команді, відображеної на екрані 1, я використовував команду Invoke-Command, з тим щоб виконати Get-ChildItem на віддаленому комп'ютері. Переглядаючи екран 1, зверніть увагу на те, що для встановлення з'єднання з віддаленим комп'ютером перед тим, як запустити блок сценарію, я не використовував команду Enter-PSSession. Команди Enter-PSSession і Invoke-Command - це два різних методу віддаленого взаємодії.

Дистанційне взаємодія в середовищі powershell 2

Екран 1. Виконання блоку сценарію на віддаленому комп'ютері

Першим параметром команди Invoke-Command є параметр -ScriptBlock; він вказує на код, який ви збираєтеся виконати. На екрані 1 я опустив ім'я параметра -ScriptBlock, оскільки вказувати його необов'язково. Параметр -ComputerName містить ім'я віддаленого комп'ютера. Як можна побачити в вихідних даних команди Get-ChildItem, середа PowerShell для зручності оператора навіть вказує ім'я віддаленого комп'ютера в стовпці PSComputerName вихідних даних.

Виконання блоку сценарію на декількох віддалених комп'ютерах

Блок сценарію можна виконувати і на декількох віддалених комп'ютерах. Це називається конфігурацією «один до багатьох» або віяловим розгортанням. На екрані 1 параметр -ComputerName команди Invoke-Command містить одне ім'я, однак в нього можна включати і кілька імен комп'ютерів. Так, команда

забезпечує виконання команди Get-ChildItem на двох віддалених комп'ютерах. У тексті статті дана команда розбита на кілька рядків, проте в консолі PowerShell її слід вводити одним рядком. Те ж стосується і інших команд, розділених на кілька рядків. Так само, як і на екрані 1, стовпець PSComputerName в вихідних даних буде містити імена комп'ютерів.

Виконання блоку сценарію в фоновому режимі

Середа PowerShell 2.0 дає можливість виконувати фонові завдання, тобто оператор може запускати команду в фоновому режимі. Така можливість корисна при запуску команд, виконання яких вимагає багато часу.

Щоб запустити фонове завдання на локальному комп'ютері, можна скористатися командою Start-Job. Але треба сказати, що дана команда не має параметра -ComputerName, а це значить, що її не можна використовувати для виконання фонового завдання на віддаленій машині. Замість цього вам потрібно буде виконати команду Invoke-Command з параметром -AsJob. Так, верхня команда на екрані 2 ініціює виконання блоку сценарію у вигляді фонового завдання на віддаленому комп'ютері titan. Після того як я ввів цю команду, на екрані відразу ж з'явилося запрошення: оболонка PowerShell відправила блок сценарію для виконання на віддалений комп'ютер і після цього повернула мені управління. У попередженні йдеться, що виконана команда не вмістилася в вікні консолі і тому не була включена в вихідні дані. Якби вікно консолі у мене було ширше, засіб форматування оболонки PowerShell включило б команду в перелік вихідних даних. У стовпчиках Id і Name вказується завдання (його ідентифікатор і зрозуміле ім'я відповідно), а в стовпці State вказується, в якому стані знаходиться завдання: виконується, призупинено або завершено. У стовпці HasMoreData міститься інформація, яка свідчить про те, що вилучені всі дані, що стосуються того чи іншого завдання, або що завдання містить більший обсяг відомостей, які слід винести.

Дистанційне взаємодія в середовищі powershell 2

Екран 2. Виконання блоку сценарію в фоновому режимі на віддаленому комп'ютері

Щоб встановити, чи завершено виконання фонового завдання, ви можете виконати команду Get-Job, як показує друга команда на екрані 2. Якщо при цьому ви не використовуєте будь-яких параметрів, Get-Job перевіряє стан усіх завдань, запущених в ході поточного сеансу. Якщо у вас виконується більше ніж одне завдання одночасно, можете використовувати такі параметри, як -Id або -Name, для вказівки на те, яке саме завдання ви хочете перевірити. Коли виконання фонового завдання завершиться, стовпець State вихідних даних буде мати значення Completed.

Для зчитування результатів виконання фонового завдання можна використовувати команду Receive-Job. Ця команда, як і команда Get-Job, повертає вихідні дані всіх завдань, запущених в ході поточного сеансу, якщо ви не використали параметр для вказівки на те, яке саме завдання вас цікавить. Так, остання команда на екрані 2 включає в себе параметр -Id, який вказує на те, що необхідно отримати вихідні дані про завдання з ідентифікатором 9. Я опустив ім'я параметра -Id, оскільки його вказувати необов'язково. На екрані 3 відображені останні рядки вихідних даних, що стосуються виконання даного дистанційного фонового завдання.

Дистанційне взаємодія в середовищі powershell 2

Екран 3. Зразок результатів виконання фонового завдання на віддаленому комп'ютері

Створення сеансів PowerShell

Наведені вище приклади показують, як отримати доступ до запрошення PowerShell на віддаленій машині і як виконувати команди на віддалених комп'ютерах. Але я поки не згадував про те, що віддалене взаємодія завжди здійснюється в контексті сеансу. Сеанс - це, скажімо так, місце проживання PowerShell. Коли ви відкриваєте вікно консолі PowerShell або вікно інтегрованого середовища сценаріїв (ISE) PowerShell, ви створюєте сеанс. Без використання коштів віддаленого взаємодії всі сеанси виконуються на локальному комп'ютері і не залежать один від одного. У всіх наведених вище прикладах віддаленого взаємодії створюються тимчасові сеанси, які автоматично припиняються після закінчення віддаленого взаємодії. Крім того, існує можливість створювати екземпляри сеансів віддаленого взаємодії і повторно використовувати їх. Такий підхід набагато ефективніше у випадках, коли необхідно звертатися до віддалених комп'ютерів більш ніж один раз.

Для створення нових сеансів використовується команда New-PSSession з параметром -ComputerName. Ім'я цього параметра в командах можна опускати. Так, команда

і натиснути клавішу введення. Параметр -Session команди Invoke-Command підтримує об'єкти session, створені за допомогою команди New-PSSession, тому далі ви можете використовувати команду, подібну до наступного:

Ця команда виконує команду Get-ChildItem на машинах phineas, ferb і perry, але не розриває з'єднання. Ви можете додати параметр -AsJob і виконати команду в фоновому режимі:

Далі можна використовувати команди Get-Job і Receive-Job для перевірки стану завдання і отримання його результатів.

Новий підхід до роботи

Білл Стюарт ([email protected]) - системний і мережевий адміністратор компанії French Mortuary, Нью-Мехіко

Поділіться матеріалом з колегами і друзями

Схожі статті