Обязательно прочитайте предыдущие статьи в серии:
- Узнайте, как автоматизировать Windows с помощью PowerShell
- Обучение использованию командлетов в PowerShell
- Обучение использованию объектов в PowerShell
- Форматирование, фильтрация и сравнение обучения в PowerShell
И оставайтесь настроенными для остальной части серии всю неделю.
Что такое Remoting?
Массовое управление серверами может быть утомительным, и если вам нужно было изменить конфигурацию IIS на 50 веб-серверах раньше, вы поймете, что я имею в виду. Это те ситуации, когда PowerShell Remoting и возможности написания языка могут прийти на помощь. Используя HTTP или более безопасный HTTPS, PowerShell Remoting позволяет отправлять команды на удаленную машину в вашей сети. Затем машина запускает команды и отправляет вам обратно результат, который, в свою очередь, отображается на вашем экране.
Давайте получим технический
В основе PowerShell Remoting лежит одна служба Windows, служба удаленного управления Windows или WinRM, так как это стало известно. Используя WinRM, вы можете настроить одну или несколько конфигураций сеансов (также называемых конечными точками), которые в основном представляют собой файлы, содержащие информацию об опыте, который вы хотите предоставить человеку, подключенному к удаленному экземпляру PowerShell. Более конкретно, вы можете использовать файлы конфигурации сеанса, чтобы определить, кто может и кто не может подключиться к экземпляру, какие командлеты и сценарии они могут запускать, а также какой контекст безопасности должен выполняться сеанс. Используя службу WinRM, вы также настроили «слушателей», которые прослушивают входящие запросы PowerShell. Эти «слушатели» могут быть либо HTTP, либо HTTPS и могут быть привязаны к одному IP-адресу на вашем компьютере. Когда вы открываете подключение PowerShell к другому компьютеру (технически это делается с использованием протокола WS-MAN, основанного на HTTP), соединение связывается с одним из этих «слушателей». Затем «слушатели» отвечают за отправку трафика в приложение, связанное с соответствующим файлом конфигурации сеанса; приложение (обычно PowerShell, но вы можете иметь другие хостинговые приложения, если хотите), затем запускает команду и передает результаты обратно через «прослушиватель» по сети и обратно на ваш компьютер.
Показать мне, как
Первое, что вам нужно сделать, это включить Remoting на машине, к которой вы хотите подключиться. Это можно сделать, выполнив следующие действия:
Enable-PSRemoting
Затем вам нужно будет ответить «да» на все приглашения. Когда вы запустите Enable-PSRemoting, на ваш компьютер внесены некоторые изменения:
- Служба WinRM запускается.
- Служба WinRM изменяется с режима ручного запуска на автоматический.
- Он создает HTTP-прослушиватель, который привязан ко всем вашим сетевым картам.
- Он также создает исключение входящего брандмауэра для протокола WS-MAN.
- Созданы некоторые конфигурации сеанса по умолчанию
Если вы используете Windows 7, а для местоположения сетевой карты установлено значение «Общий», включение PowerShell Remoting завершится с ошибкой. Чтобы исправить это, просто переключитесь на домашнюю или рабочую сеть. Кроме того, вы можете пропустить проверку сети, используя следующее:
Enable-PSRemoting –SkipNetworkProfileCheck
Существует два способа подключения к другой машине с помощью PowerShell. Существует один к одному метод, который очень похож на использование SSH, а затем есть метод от одного до многих.
Использование сеанса PowerShell
Первый способ подключения к удаленному компьютеру с помощью PowerShell - это использование сеанса PowerShell. Проще говоря, сеанс позволяет вам запускать команды на удаленной машине интерактивно, так же, как и на вашей собственной машине. Чтобы открыть сеанс, просто введите следующее:
Enter-PSSession –ComputerName “Darlah”
Get-ChildItem –Path C:
Использование команды Invoke-Command
Второй способ использования PowerShell на удаленном компьютере - использовать Invoke-Command. Преимущество использования Invoke-Command заключается в том, что вы можете выполнять одну и ту же команду на нескольких компьютерах одновременно. Как вы можете себе представить, это особенно полезно, когда вы хотите сделать что-то вроде сбора журналов событий с ваших серверов. Invoke-Command следует следующему синтаксису:
Invoke-Command -ComputerName Darlah,localhost -ScriptBlock {Get-EventLog Application -Newest 2}
Примечание. Существуют некоторые исключения из этого правила, например, большинство примитивных типов, таких как целые числа, можно десериализовать с включенными его методами. Существует также процесс под названием «Регидратация», где некоторые методы могут быть добавлены обратно к десериализованным объектам. Поэтому будьте осторожны и помните, что Get-Member - ваш друг.