Школа Geek: научитесь использовать Remoting в PowerShell

Оглавление:

Школа Geek: научитесь использовать Remoting в PowerShell
Школа Geek: научитесь использовать Remoting в PowerShell

Видео: Школа Geek: научитесь использовать Remoting в PowerShell

Видео: Школа Geek: научитесь использовать Remoting в PowerShell
Видео: Как получить полный доступ к чужому ПК? Программа для удаленки!) - YouTube 2024, Май
Anonim
Одна из лучших возможностей PowerShell - возможность удаленного управления серверами. Это даже позволяет вам управлять кучей из них одновременно.
Одна из лучших возможностей PowerShell - возможность удаленного управления серверами. Это даже позволяет вам управлять кучей из них одновременно.

Обязательно прочитайте предыдущие статьи в серии:

  • Узнайте, как автоматизировать 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

Image
Image

Затем вам нужно будет ответить «да» на все приглашения. Когда вы запустите Enable-PSRemoting, на ваш компьютер внесены некоторые изменения:

  • Служба WinRM запускается.
  • Служба WinRM изменяется с режима ручного запуска на автоматический.
  • Он создает HTTP-прослушиватель, который привязан ко всем вашим сетевым картам.
  • Он также создает исключение входящего брандмауэра для протокола WS-MAN.
  • Созданы некоторые конфигурации сеанса по умолчанию

Если вы используете Windows 7, а для местоположения сетевой карты установлено значение «Общий», включение PowerShell Remoting завершится с ошибкой. Чтобы исправить это, просто переключитесь на домашнюю или рабочую сеть. Кроме того, вы можете пропустить проверку сети, используя следующее:

Enable-PSRemoting –SkipNetworkProfileCheck

Однако мы рекомендуем вам скорее изменить местоположение сети.
Однако мы рекомендуем вам скорее изменить местоположение сети.

Существует два способа подключения к другой машине с помощью PowerShell. Существует один к одному метод, который очень похож на использование SSH, а затем есть метод от одного до многих.

Использование сеанса PowerShell

Первый способ подключения к удаленному компьютеру с помощью PowerShell - это использование сеанса PowerShell. Проще говоря, сеанс позволяет вам запускать команды на удаленной машине интерактивно, так же, как и на вашей собственной машине. Чтобы открыть сеанс, просто введите следующее:

Enter-PSSession –ComputerName “Darlah”

В подсказке будет получен префикс, который обозначает машину, на которой работают командлеты.
В подсказке будет получен префикс, который обозначает машину, на которой работают командлеты.
Отсюда вы можете обработать подсказку, как будто вы сидите на удаленной машине. Например, если вы хотите увидеть все файлы на диске C:, вы можете сделать простой:
Отсюда вы можете обработать подсказку, как будто вы сидите на удаленной машине. Например, если вы хотите увидеть все файлы на диске C:, вы можете сделать простой:

Get-ChildItem –Path C:

Если вы исходите из фона Linux, вы можете подумать об использовании этого одного метода для удаленного доступа в качестве альтернативы PowerShell для SSH.
Если вы исходите из фона Linux, вы можете подумать об использовании этого одного метода для удаленного доступа в качестве альтернативы PowerShell для SSH.

Использование команды Invoke-Command

Второй способ использования PowerShell на удаленном компьютере - использовать Invoke-Command. Преимущество использования Invoke-Command заключается в том, что вы можете выполнять одну и ту же команду на нескольких компьютерах одновременно. Как вы можете себе представить, это особенно полезно, когда вы хотите сделать что-то вроде сбора журналов событий с ваших серверов. Invoke-Command следует следующему синтаксису:

Invoke-Command -ComputerName Darlah,localhost -ScriptBlock {Get-EventLog Application -Newest 2}

Поскольку команда выполняется параллельно на всех машинах, вам понадобится какой-то способ увидеть, с какого ПК пришел данный результат. Вы можете сделать это, посмотрев свойство PSComputerName.
Поскольку команда выполняется параллельно на всех машинах, вам понадобится какой-то способ увидеть, с какого ПК пришел данный результат. Вы можете сделать это, посмотрев свойство PSComputerName.
Когда вы используете Invoke-Command, у вас больше нет объектов, которые можно ожидать в конвейере. Вы видите, чтобы PowerShell возвращал информацию с удаленного компьютера на ваш компьютер, им нужен какой-то способ представления объектов, которые вы запускали на выходах удаленной машины. В наши дни кажется, что выбранный способ представления иерархической структуры данных заключается в использовании XML, а это означает, что при выдаче команды с использованием Invoke-Command результаты сначала сериализуются в XML, а затем отправляются обратно на ваш компьютер.Как только они возвращаются к вашей машине, они десериализуются обратно в объект; здесь получается, что когда они десериализованы, все методы, кроме метода ToString (), будут удалены из этого объекта.
Когда вы используете Invoke-Command, у вас больше нет объектов, которые можно ожидать в конвейере. Вы видите, чтобы PowerShell возвращал информацию с удаленного компьютера на ваш компьютер, им нужен какой-то способ представления объектов, которые вы запускали на выходах удаленной машины. В наши дни кажется, что выбранный способ представления иерархической структуры данных заключается в использовании XML, а это означает, что при выдаче команды с использованием Invoke-Command результаты сначала сериализуются в XML, а затем отправляются обратно на ваш компьютер.Как только они возвращаются к вашей машине, они десериализуются обратно в объект; здесь получается, что когда они десериализованы, все методы, кроме метода ToString (), будут удалены из этого объекта.
Image
Image

Примечание. Существуют некоторые исключения из этого правила, например, большинство примитивных типов, таких как целые числа, можно десериализовать с включенными его методами. Существует также процесс под названием «Регидратация», где некоторые методы могут быть добавлены обратно к десериализованным объектам. Поэтому будьте осторожны и помните, что Get-Member - ваш друг.

Домашнее задание

Прочтите секреты PowerShell Remoting ebook от Don Jones.

Рекомендуемые: