Головна » як » Geek School Дізнайтеся, як використовувати віддалену роботу в PowerShell

    Geek School Дізнайтеся, як використовувати віддалену роботу в PowerShell

    Однією з найкращих функцій PowerShell є можливість віддаленого керування серверами. Це дозволяє навіть керувати ними одночасно.

    Обов'язково прочитайте попередні статті серії:

    • Дізнайтеся, як автоматизувати Windows за допомогою PowerShell
    • Навчання використанню командлетів у PowerShell
    • Навчання використанню об'єктів у PowerShell
    • Навчання форматування, фільтрації та порівняння в PowerShell

    І залишайтеся з нами для решти серії цілий тиждень.

    Що таке Remoting?

    Масове управління серверами може бути втомливим, і якщо вам довелося змінити конфігурацію IIS на 50 веб-серверах раніше, ви будете знати, що я маю на увазі. Такі типи ситуацій, коли PowerShell Remoting і можливості мови сценаріїв можуть прийти на допомогу. Використовуючи HTTP або більш безпечний HTTPS, PowerShell Remoting дозволяє відправляти команди на віддалену машину в мережі. Потім машина запускає команди і надсилає вихідні дані назад, що, у свою чергу, відображається на екрані.

    Будемо отримувати технічні

    В основі PowerShell Remoting лежить єдина служба Windows, служба віддаленого керування Windows або служба WinRM, як стало відомо. Використовуючи WinRM, ви можете налаштувати одну або декілька конфігурацій сеансів (також відомих як кінцеві точки), які в основному є файлами, що містять інформацію про досвід, який ви хочете надати особі, що підключається до віддаленого прикладу PowerShell. Більш конкретно, ви можете використовувати файли конфігурації сеансу, щоб визначити, хто може і хто не може підключитися до екземпляра, які cmdlet і сценарії, які вони можуть виконувати, а також те, що контекст безпеки сесії має бути запущено в. Використовуючи службу WinRM, ви також встановлюєте «слухачів», які слухають вхідні запити PowerShell. Ці "слухачі" можуть бути HTTP або HTTPS і можуть бути прив'язані до однієї IP-адреси на вашому комп'ютері. Коли ви відкриваєте підключення PowerShell до іншої машини (технічно це робиться за допомогою протоколу WS-MAN, який базується на HTTP), з'єднання прив'язується до одного з цих «слухачів». Потім "слухачі" відповідають за відправлення трафіку до програми, пов'язаної з відповідним файлом конфігурації сеансу; додаток (зазвичай PowerShell, але ви можете мати інші хостинг-програми, якщо хочете), потім запускає команду і надсилає результати через "слухач" через мережу і назад на вашу машину.

    Покажіть мені, як

    Перше, що вам потрібно зробити, це ввімкнути функцію віддаленого доступу на машині, до якої потрібно підключитися. Це можна зробити, виконавши такі дії:

    Увімкнути-PSRemoting

    Потім потрібно відповісти так на всі підказки. Під час запуску Enable-PSRemoting на комп'ютері вносяться деякі зміни:

    • Служба WinRM запускається.
    • Служба WinRM переходить з режиму ручного запуску на автоматичний.
    • Він створює HTTP-слухач, який прив'язаний до всіх ваших мережевих карт.
    • Крім того, для протоколу WS-MAN створюється виняток вхідного брандмауера.
    • Деякі конфігурації сеансу за промовчанням створюються

    Якщо ви використовуєте Windows 7 і розташування вашої мережевої картки встановлено на загальнодоступне, увімкнення відключення PowerShell буде завершено. Щоб виправити це, просто перейдіть до домашнього або робочого мережного розташування. Крім того, ви можете пропустити перевірку мережі, використовуючи наступне:

    Увімкнути-PSRemoting -SkipNetworkProfileCheck

    Проте ми радимо змінити розташування в мережі.

    Існує два способи підключення до іншої машини за допомогою PowerShell. Є один до одного метод, який дуже схожий на використання SSH, а потім є один до багатьох метод.

    Використання сеансу PowerShell

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

    Enter-PSSession-Комп'ютерне ім'я "Darlah"

    Підказка отримає префікс, який позначає машину, проти якої виконуються cmdlets.

    Звідси ви можете по-справжньому ставитися до підказки, як якщо б ви сиділи за віддаленою машиною. Наприклад, якщо ви хочете бачити всі файли на диску C: ви можете зробити простий:

    Get-ChildItem -Path C: \ t

    Якщо ви прийшли з фону Linux, можна подумати про використання цього методу для віддаленого використання як альтернативу PowerShell SSH.

    Використовуючи команду Invoke-Command

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

    Invoke-Command -ComputerName Darlah, localhost -ScriptBlock Програма Get-EventLog -Newest 2

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

    Коли ви використовуєте команду Invoke-Command, у вас більше немає об'єктів, які можна очікувати в конвеєрі. Як ви бачите, для того, щоб PowerShell повернув інформацію від віддаленого комп'ютера до вашої машини, вони потребують певного способу представлення об'єктів, які команда виконувала на виходах віддаленого комп'ютера. У ці дні, здається, обраний спосіб представлення ієрархічної структури даних полягає у використанні XML, тобто, коли ви видаєте команду за допомогою Invoke-Command, результати спочатку серіалізуються в XML, перш ніж відправляти назад на вашу машину. Після того, як вони повернуться до вашої машини, вони повертаються назад до об'єкта; Ось тут є те, що коли вони десериалізуються, всі методи, окрім методу ToString (), що об'єкт було знято з нього.

    Примітка: Існують деякі винятки з цього правила, наприклад, більшість примітивних типів, таких як цілі числа, можуть бути десериализованы за допомогою його методів. Існує також процес, який називається Регідратація, де деякі методи можуть бути додані назад до десеріалізованих об'єктів. Так що будьте уважні і пам'ятайте, що Get-Member - ваш друг.

    Домашнє завдання

    • Прочитайте секрети книг PowerShell Remoting Дон Джонс.