Powershell віддалене взаємодія з допомогою powershell 2

У цій статті докладно пояснюється тема віддаленого взаємодії з використанням PowerShell 2.0. Насамперед нам необхідно запустити службу, за допомогою якої буде здійснюватися віддалене взаємодія.

Status Name DisplayName ------ ---- ----------- Stopped winrm Windows Remote Management (WS-Manag.

Запитуємо імена всіх підключених провайдерів:
Get-PSProvider
Як бачимо, у нас тепер з'явився ще один провайдер під ім'ям WSMan.
Призначення довірених вузлів

В консолі PowerShell 2.0 запускаємо з правами адміністратора команди:

Set-Location -Path WSMan: Set-Location -Path localhost \ client Get-ChildItem

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

На тому комп'ютері, з яким ви бажаєте віддалено працювати, слід вказати, яким серверам дозволено підключення до цієї машини. Такі сервери відомі як "довірені вузли". Таким чином, якщо ви перебуваєте на сервері "MyServer", то перш ніж ви зможете віддалено працювати з комп'ютером "MyComputer", слід налаштувати довірені вузли (TrustedHosts). Наведений нижче спосіб призначення довірених вузлів використовується в тому випадку, коли комп'ютер не входить до складу домену Active Directory. Якщо ж комп'ютер входить до складу домену Active Directory, то настройки TrustedHosts можна конфігурувати через групову політику (Group Policy).

Важливо!
Наведена нижче команда не буде працювати, якщо поточним каталогом не встановлено WSMan: \ localhost \ client (див. Виклик команд, виконаний нами вище).

Можна запустити команду з іншого каталогу, але тоді буде потрібно вказати повний шлях до TrustedHosts:

На запит про підтвердження тиснемо клавішу «Y».

Для того, щоб PowerShell побачив зміни, виконані нами в налаштуваннях TrustedHosts - необхідно перезапустити службу WSMan. Це робиться за допомогою наступної команди:
Restart-Service winrm

Аналогічну дію можна виконати з під DOS. Запустіть команду winrm -. Ви побачите загальну довідку по команді. Для того, щоб подивитися поточне значення TrustedHosts, слід виконати команду:

winrm get winrm / config / client

а для того, щоб встановити значення - слід виконати:

winrm set winrm / config / client / @

Для завершення сеансу віддаленої роботи, слід виконати команду:

New-PSSession -computername testMachine2 Get-PSSession

Завершити роботу цієї сесії можна так:

Якщо ви хочете протестувати віддалену роботу, але не маєте другої машини, тоді створіть "віддалене підключення" вашого компьюетера до себе самого. Наприклад, якщо ваша машина називається "MyMachine", тоді спробуйте це:

New-PSSession -computername MyMachine

Можливо це здасться вам дивно і нелогічно, однак у такий спосіб ви все ж зможете випробувати віддалену роботу в PowerShell 2.0.

Робота в віддаленому сеансі PowerShell 2.0
Після створення віддаленого підключення, ви можете організовувати конвеєри команд, запускаючи їх в консолі PowerShell 2.0, але при цьому виконуватися вони будуть на віддаленій машині, як ніби ви знаходитесь за її клавіатурою і набираєте команди там, а не тут. Наприклад, запустіть таку команду і подивіться результат її роботи:

Set-Location c: \ | Get-childitem

Оскільки основне завдання даного навчального керівництва полягає в тому, щоб допомогти вам створити сесію віддаленого підключення PowerShell 2.0 і показати, як її закрити, то вам самим доведеться вирішувати, які операції ви бажаєте виконати в ході віддаленого підключення.

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

Як тільки віддалене підключення у вас запрацює, це відразу дає вам можливість використовувати PowerShell 2.0 для управління комп'ютерами, підключеними до вашої мережі. Тепер ви можете виконувати сценарії на інших машинах. У PowerShell 2.0 багато командлети підтримують параметр '-computerName', але віддалене підключення дозволяє вам використовувати команди сімейства PSSession, а так само викликати Invoke-Command (тобто ви можете робити все що завгодно).

Пошук і усунення проблем, що виникають в процесі віддаленої роботи PowerShell 2.0

Одна типова проблема - ПОМИЛКА «Access is denied» (доступ заборонений).

Рішення:
• Увімкніть PowerShell 2.0 з правами адміністратора. Спробуйте на обох машинах (на тій, з якої підключаєтеся, і на тій, до якої підключаєтеся) задати налаштування 'TrustedHosts' значення * (зірочка). Тільки не забувайте, що такий варіант дозволяє підключення звідусіль.
• Не забудьте перезапустити службу WinRm, інакше виконані вами для 'TrustedHosts' зміни не вступлять в силу. Для перезапуску служби слід в консолі PowerShell 2.0 виконати команду: Restart-Service WinRm
• Крім того, будьте уважніше і не плутайте ім'я провайдера WSMan з ім'ям служби WinRm.
• Ще один дивний, але часом допомагає порада: Спробуйте повторити спробу віддаленого підключення. Дивно, але це може не спрацювати з першої спроби, але спрацювати з другої або третьої. Тобто вам потрібно повторно виконати команду: Enter-PSSession -computerName myOtherMachineName

Брандмауери, PowerShell 2.0 і «The rpc server is unavailable» (Сервер RPC недоступний)
Фахівці з безпеки в жаху піднімуть руки від такої пропозиції, проте в разі отримання зазначеної вище помилки, я пропоную вам відключити брандмауер на обох комп'ютерах. Якщо після відключення все запрацює - це добре, значить потрібно перевірити задіяність портів 135 і 445. Налаштуйте для цих портів виключення в брандмауерах - це дасть можливість PowerShell 2.0 працювати віддалено і при цьому брандмауер захистить комп'ютер від загроз.

Два типу, що використовуються для віддаленої роботи в PowerShell 2.0
Пора повідомити, що існують два варіанти віддаленої роботи в PowerShell 2.0.
Перший спосіб - це більш витончена варіація, в якій використовуються командлети, створюючи стійкий канал до другої машині. Імена таких команд містять в якості іменника слово "PSSession" (нагадую, що імена командлетів будуються за правилом "Дієслово-Іменник"). Отримати перелік цих командлет можна за допомогою такої команди:

Get-Command -noun PSSession

Другий спосіб - це так само більш канонічна форма віддаленої роботи PowerShell 2.0. Даний спосіб просто розширює локальні команди, додаючи до них параметр '-computerName', за допомогою якого вказується віддалено розташований комп'ютер, на якому необхідно виконати операцію. В результаті, такі команди будуть запущені на іншій машині, що знаходиться в мережі:

Get-Process -computerName machine2

Перелік командлет, які можна використовувати таким простим способом (тобто тих, що мають в своєму складі параметр '-computerName') можна отримати за допомогою такої команди:

Повний же перелік командлет, які можуть працювати за другим способом, можна отримати так:

Англомовний джерело викладеної і трохи переробленої мною інформації тут.

Далі покажу маленькі приклади віддаленої роботи:

# Створюємо нову сесію підключення до віддаленої машині $ s = New-PSSession -computername TestComputer

# Виконуємо на віддаленій машині довільні дії, наприклад - дивимося вміст каталогу C:
Invoke-Command -Session $ s -ScriptBlock

# Створюємо на віддаленій машині каталог "% ProgramFiles% \ MyCompany \ MySoft"
Invoke-Command -Session $ s -ScriptBlock

# Однак, набагато зручніше не вручну вбивати команди, а запускати на віддаленій машині вже готовий скрипт:
Invoke-Command -Session $ s -FilePath "\\ ServerDir \ Common Scripts \ MyScript.ps1"

# Завершуємо сесію
$ S | remove-PSSession

Схожі статті