Geek School Научитесь использовать удаленное взаимодействие в PowerShell
Одна из лучших функций PowerShell - это возможность удаленного управления вашими серверами. Это даже позволяет вам управлять кучей из них одновременно.
Обязательно прочитайте предыдущие статьи серии:
- Узнайте, как автоматизировать Windows с помощью PowerShell
- Учимся использовать командлеты в PowerShell
- Изучение, как использовать объекты в PowerShell
- Обучение форматированию, фильтрации и сравнению в PowerShell
И оставайтесь с нами до конца сериала всю неделю.
Что такое удаленное взаимодействие?
Массовое управление вашими серверами может быть утомительным, и если вам раньше приходилось вносить изменения в конфигурацию 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, а местоположение вашей сетевой карты установлено в Public, включение PowerShell Remoting завершится неудачно. Чтобы это исправить, просто переключитесь на домашнюю или рабочую сеть. Кроме того, вы можете пропустить проверку сети, используя следующее:
Enable-PSRemoting -SkipNetworkProfileCheck
Тем не менее, мы рекомендуем вам сменить местоположение в сети.
Существует два способа подключения к другому компьютеру с помощью PowerShell. Есть метод один-к-одному, который очень похож на использование SSH, а затем есть метод один-ко-многим.
Использование сеанса PowerShell
Первый способ подключения к удаленной машине с помощью PowerShell - это использование сеанса PowerShell. Проще говоря, сеанс позволяет вам запускать команды на удаленном компьютере в интерактивном режиме, почти так же, как на своем собственном компьютере. Чтобы открыть сеанс, просто введите следующее:
Enter-PSSession -ComputerName «Дарла»
Приглашение получит префикс, обозначающий компьютер, с которым вы запускаете командлеты..
Отсюда вы можете по-настоящему воспринимать подсказку, как если бы вы сидели за удаленной машиной. Например, если вы хотите увидеть все файлы на диске C: \, вы можете сделать следующее:
Get-ChildItem -Path C: \
Если вы работаете в Linux, вы можете использовать этот метод удаленного взаимодействия в качестве альтернативы SSH для PowerShell..
Использование 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» Дона Джонса..