powershell как запустить скрипт на удаленном компьютере

PowerShell: используем Invoke-Command для запуска команд/скриптов на удаленных компьютерах

В этой статье мы рассмотрим особенности использования командлета Invoke-Command для удаленного выполнения команд и скриптов. Возможно запускать команды удаленно на одном компьютере, или параллельно на множестве компьютерах в вашей сети. Командлет Invoke-Command использует возможности удаленного управления, заложенные в PowerShell Remoting. PowerShell Remoting позволяет удаленно подключаться к PowerShell сессиям на компьютерах через службу WinRM (Windows Remote Management) через протокол Web Services for Management (WS-Management). Этот сервис дает возможность принимать команды Powershell и устанавливать сеансы.

Настройка WinRM для PowerShell Remoting

Для связи между компьютерами в PowerShell Remoting используется протокол HTTP (порт TCP/5985) или HTTPS (порт TCP/5986). По умолчанию используется протокол HTTP, но даже этот трафик шифруется с помощью ключа AES-256 (впрочем, есть угроза атак man-in-the middle). Возможна аутентификация через Kerberos (в домене) или NTLM.

На удаленных компьютерах, к которым вы планируете подключаться должен быть запущена служба WinRM. Проверить это можно так:

Если служба не запущена, запустите ее:

powershell как запустить скрипт на удаленном компьютере

Данная команда запустит службу WinRM (установит автоматический запуск), выставит настройки winrm по-умолчанию и добавит исключение в Windows Firewall. Команда Enable-PSRemoting –Force включает WinRM без запроса пользователя.

Теперь к компьютеру можно подключиться удаленно через PowerShell Remoting.

Также нужно включить правило Window Defender Firewall, которое разрешает доступ к WinRM в общедоступных сетях. Вы можете включить правило брандмауэра с помощью GPO или PowerShell:

Чтобы проверить подключение к удаленному компьютер через PowerShell Remoting используется команда:

powershell как запустить скрипт на удаленном компьютере

Если у вас нет домена, или вы обращаетесь к компьютерам через PowerShell Remoting по IP адресам, в этом случае используется для аутентификации используется протокол NTLM. При использовании NTLM, при выполнении команду Invoke-Command появится ошибка:

powershell как запустить скрипт на удаленном компьютере

Для корректной работы NTLM аутентификации, на компьютере, с которого вы будете устанавливать подключения нужно выполнить дополнительные действия: выпустить SSL сертификат и исопльзовать его для шифрования HTTPS трафика winrm, или добавить имя/IP адрес хоста в доверенные:

powershell как запустить скрипт на удаленном компьютере

Либо можно разрешить подключение ко все компьютерам (не рекомендуется, т.к. один из главных недостатков NTLM – он не осуществляет проверку подлинности).

Аналогичные настройки нужно сделать на удаленных хостах.

Чтобы вывести список доверенных хостов, выполните команду:

Чтобы применить изменения, перезапустите службу WinRM:

Удаленное выполнение PowerShell с помощью Invoke-Command

Командлет Invoke-Command позволяет выполнить команду на одном или нескольких удаленных компьютерах.

Например, для запуска одиночной команды на удаленном компьютере можно использовать такую команду:

powershell как запустить скрипт на удаленном компьютере

По-умолчанию команда, посланная через Invoke-Command выполняется на удалённом компьютере от текущего пользователя. Если нужно выполнить команду от имени другого пользователя, сначала нужно запросить учетные данные пользователя и сохранить их в переменную:

powershell как запустить скрипт на удаленном компьютере

Можно задать несколько команд в блоке ScriptBlock, их нужно разделить точкой с запятой. Например следующая команда выведет текущий часовой пояс и изменит его на другой:

powershell как запустить скрипт на удаленном компьютере

Используем Invoke-Command для параллельного запуска команд на нескольких компьютерах

Командлет Invoke-Command можно использовать для параллельного выполнения команд на нескольких удаленных компьютерах.

В самом просто случае имена компьютеров, на которых нужно выполнить команды указываются через запятую:

powershell как запустить скрипт на удаленном компьютере

Список компьютеров можно поместить в переменную (массив):

Или получить из текстового файла:

Также можно получить список компьютеров в ADс помощью командлета Get-ADComputer из модуля AD PowerShell:

Чтобы выполнить команду на всех Windows Server в домене, исопльзуйте такой код:

Если компьютер выключен, или недоступен, благодаря параметру SilentlyContinue скрипт не будет остановлен и продолжит выполнение на других компьютерах.

Чтобы понять с какого компьютера получены результаты, нужно использовать специальную переменную окружения PSComputerName.

powershell как запустить скрипт на удаленном компьютере

При запуске команды через Invoke-Command на нескольких компьютерах она выполняется параллельно. В Invoke-Command есть ограничение на максимальное количество компьютеров, которыми можно управлять одновременно (ограничение на количество одновременных PSSession). Оно определяется параметром ThrottleLimit (по умолчанию 32). Если вам нужно выполнить команду одновременно более чем на 32 компьютерах (например, на 128), используйте параметр –ThrottleLimit 128 (но это вызывает повышенную нагрузку на ваш компьютер).

Если вы хотите запускать команды на удаленном компьютере интерактивно, используйте командлет Enter-PSSession.

Источник

Глава 8. Удаленное взаимодействие PowerShell

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

Как показано в следующем примере, Get-Command можно использовать с параметром ParameterName, чтобы определить, какие команды имеют параметр ComputerName.

Удаленное взаимодействие «один к одному»

После этого вы сможете ввести учетные данные один раз и использовать их для каждой команды в активном текущем сеансе PowerShell.

Создайте сеанс удаленного взаимодействия PowerShell «один к одному» с контроллером домена DC01.

При подключении к удаленному компьютеру в рамках интерактивного сеанса удаленного взаимодействия PowerShell «один к одному» вы фактически находитесь на удаленном компьютере. Все объекты являются обычными объектами, аналогичными тем, с которыми вы уже работали.

Удаленное взаимодействие «один ко многим»

Иногда может потребоваться выполнить задачу в интерактивном режиме на удаленном компьютере. Удаленное взаимодействие гораздо более эффективно при выполнении задачи на нескольких удаленных компьютерах одновременно. С помощью командлета Invoke-Command выполните команду на одном удаленном компьютере или нескольких одновременно.

Передача предыдущей команды в Get-Member подтверждает, что результаты действительно десериализованы.

Обратите внимание, что в десериализованных объектах отсутствует большинство методов. Это значит, что они не являются активными объектами, они инертны. Нельзя запускать или останавливать службу с помощью десериализованного объекта, так как он является моментальным снимком состояния этого объекта на момент выполнения команды на удаленном компьютере.

Сеансы PowerShell

Подобно сеансам CIM, обсуждаемым в главе 7, сеанс PowerShell на удаленном компьютере можно использовать для запуска нескольких команд на удаленном компьютере без дополнительных затрат на создание нового сеанса для каждой отдельной команды.

Создайте сеанс PowerShell с каждым из трех компьютеров, с которыми мы работали в этой главе, — DC01, SQL02 и WEB01.

После создания сеанса с использованием альтернативных учетных данных указывать учетные данные при каждом выполнении команды не требуется.

Завершив работу с сеансами, не забудьте удалить их.

Сводка

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

Источник

about_Remote

Краткое описание

Описание выполнения удаленных команд в PowerShell.

Подробное описание

Удаленные команды можно выполнять на одном компьютере или на нескольких компьютерах, используя временное или постоянное подключение. Можно также запустить интерактивный сеанс с одним удаленным компьютером.

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

Примечание. чтобы использовать удаленное взаимодействие PowerShell, на локальном и удаленном компьютерах необходимо настроить удаленное взаимодействие. Дополнительные сведения см. в разделе about_Remote_Requirements.

КАК ЗАПУСТИТЬ ИНТЕРАКТИВНЫЙ СЕАНС (ENTER-PSSESSION)

Самый простой способ запуска удаленных команд — запустить интерактивный сеанс с удаленным компьютером.

При запуске сеанса команды, которые вы вводите, выполняются на удаленном компьютере, точно так же, как если бы они были введены непосредственно на удаленном компьютере. В каждом интерактивном сеансе можно подключиться только к одному компьютеру.

Чтобы запустить интерактивный сеанс, используйте командлет Enter-PSSession. Следующая команда запускает интерактивный сеанс с компьютером Server01:

Командная строка изменится, указывая, что вы подключены к компьютеру Server01.

Теперь можно ввести команды на компьютере Server01.

Чтобы завершить интерактивный сеанс, введите:

Дополнительные сведения см. в разделе Ввод-PSSession.

ИСПОЛЬЗОВАНИЕ КОМАНДЛЕТОВ С ПАРАМЕТРОМ COMPUTERNAME ДЛЯ ПОЛУЧЕНИЯ УДАЛЕННЫХ ДАННЫХ

Несколько командлетов имеют параметр ComputerName, позволяющий получать объекты с удаленных компьютеров.

Поскольку эти командлеты не используют удаленное взаимодействие PowerShell на основе WS-Management, можно использовать параметр ComputerName этих командлетов на любом компьютере с PowerShell. Компьютеры не обязательно должны быть настроены для удаленного взаимодействия PowerShell, и компьютеры не должны отвечать требованиям к системе для удаленного взаимодействия.

Следующие командлеты имеют параметр ComputerName:

Например, следующая команда получает службы на удаленном компьютере Server01:

ВЫПОЛНЕНИЕ УДАЛЕННОЙ КОМАНДЫ

Чтобы выполнить другие команды на удаленных компьютерах, используйте командлет Invoke-Command.

Чтобы выполнить одну команду или несколько несвязанных команд, используйте параметр ComputerName параметра Invoke-Command, чтобы указать удаленные компьютеры. Используйте параметр ScriptBlock для указания команды.

Например, следующая команда выполняет команду Get-Culture на компьютере Server01.

Параметр ComputerName предназначен для ситуации, когда на одном или нескольких компьютерах выполняется одна команда или несколько несвязанных команд. Чтобы установить постоянное подключение к удаленному компьютеру, используйте параметр Session.

СОЗДАНИЕ ПОСТОЯННОГО ПОДКЛЮЧЕНИЯ (PSSESSION)

при использовании параметра ComputerName командлета Invoke-Command Windows PowerShell устанавливает соединение только для команды. Затем по завершении команды она закрывает подключение. Все переменные или функции, определенные в команде, теряются.

ВЫПОЛНЕНИЕ КОМАНД В PSSESSION

С помощью PSSession можно выполнять ряд удаленных команд, которые совместно используют данные, такие как функции, псевдонимы и значения переменных. Для выполнения команд в PSSession используйте параметр Session командлета Invoke-Command.

ВЫПОЛНЕНИЕ УДАЛЕННОЙ КОМАНДЫ НА НЕСКОЛЬКИХ КОМПЬЮТЕРАХ

Чтобы выполнить удаленную команду на нескольких компьютерах, введите все имена компьютеров в значении параметра ComputerName команды Invoke-Command. Разделяйте имена запятыми.

Например, следующая команда выполняет команду Get-Culture на трех компьютерах:

Можно также выполнить команду в нескольких PSSession. Следующие команды создают PSSession на компьютерах Server01, Server02 и Server03, а затем выполняют Get-Cultureную команду в каждом из PSSession.

Чтобы включить список компьютеров локального компьютера, введите имя локального компьютера, введите точку (.) или введите localhost.

ЗАПУСК СЦЕНАРИЯ НА УДАЛЕННЫХ КОМПЬЮТЕРАХ

Чтобы запустить локальный скрипт на удаленных компьютерах, используйте параметр FilePath командлета Invoke-Command.

Например, следующая команда запускает сценарий Sample.ps1 на компьютерах S1 и S2:

Результаты сценария возвращаются на локальный компьютер. Нет необходимости копировать файлы.

КАК ПРЕРЫВАТЬ УДАЛЕННУЮ КОМАНДУ

Чтобы прервать выполнение команды, нажмите клавиши CTRL + C. Запрос на прерывание передается на удаленный компьютер, на котором завершается Удаленная команда.

ДОПОЛНИТЕЛЬНЫЕ СВЕДЕНИЯ

Сведения о требованиях к системе для удаленного взаимодействия см. в разделе about_Remote_Requirements.

Справку по форматированию удаленных выходных данных см. в разделе about_Remote_Output.

Сведения о том, как работает удаленное взаимодействие, как управлять удаленными данными, особыми конфигурациями, проблемами безопасности и другими часто задаваемыми вопросами, см. в статье вопросы и ответы об удаленном взаимодействии PowerShell.

Дополнительные сведения об устранении ошибок удаленного взаимодействия см. в разделе about_Remote_Troubleshooting.

Дополнительные сведения о PSSession и постоянных подключениях см. в разделе about_PSSessions.

Дополнительные сведения о фоновых заданиях PowerShell см. в разделе about_Jobs.

Источник

Выполнение удаленных команд

Одна команда Windows PowerShell позволяет запускать команды на одном или сотнях компьютеров. Windows PowerShell поддерживает удаленное вычисление с помощью разных технологий, включая WMI, RPC и WS-Management.

PowerShell Core поддерживает инструментарий WMI, WS-Management и удаленное взаимодействие через SSH. В PowerShell 6 RPC больше не поддерживается. В PowerShell 7 и более поздних версиях RPC поддерживается только в Windows.

Дополнительные сведения об удаленном взаимодействии в PowerShell Core см. в следующих статьях:

Удаленное взаимодействие с Windows PowerShell без настройки

Многие командлеты Windows PowerShell имеют параметр ComputerName, который позволяет собирать данные и изменять параметры одного или нескольких удаленных компьютеров. Эти командлеты используют разные протоколы связи и работают во всех операционных системах Windows без специальной настройки.

В эти командлеты входят следующие:

Обычно командлеты, которые поддерживают удаленное взаимодействие без специальной настройки, имеют параметр ComputerName, но не имеют параметра Session. Чтобы найти эти командлеты в сеансе, введите:

Служба удаленного взаимодействия Windows PowerShell

Благодаря использованию протокола WS-Management служба удаленного взаимодействия Windows PowerShell позволяет запустить любую команду Windows PowerShell на одном или нескольких удаленных компьютерах. Вы можете устанавливать постоянные подключения, запускать интерактивные сеансы и выполнять скрипты на удаленных компьютерах.

Чтобы использовать службу удаленного взаимодействия Windows PowerShell, удаленный компьютер должен быть настроен для удаленного управления. Дополнительные сведения, в том числе инструкции, см. в разделе about_Remote_Requirements.

После настройки службы удаленного взаимодействия Windows PowerShell вы получите доступ ко многим стратегиям удаленного взаимодействия. В этой статье перечислены только некоторые из них. См. дополнительные сведения об удаленном взаимодействии.

Запуск интерактивного сеанса

Чтобы запустить интерактивный сеанс с одним удаленным компьютером, используйте командлет Enter-PSSession. Например, чтобы запустить интерактивный сеанс с удаленным компьютером Server01, введите:

В командной строке отобразится имя удаленного компьютера. Все команды, введенные в командной строке, запускаются на удаленном компьютере, а результаты отображаются на локальном компьютере.

Чтобы завершить интерактивный сеанс, введите:

См. дополнительные сведения о командлетах Enter-PSSession и Exit-PSSession:

Выполнение удаленной команды

Чтобы выполнить команду на одном или нескольких компьютерах, используйте командлет Invoke-Command. Например, чтобы выполнить команду Get-UICulture на удаленных компьютерах Server01 и Server02, введите:

Выходные данные будут возвращены на ваш компьютер.

Запуск сценария

Например, следующая команда выполняет скрипт DiskCollect.ps1 на удаленных компьютерах Server01 и Server02.

Установка постоянного подключения

После установки сеансов в них можно выполнить любую команду. Так как сеансы являются постоянными, вы можете собирать данные из одной команды и использовать их в другой.

Расширенная служба удаленного взаимодействия

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

См. дополнительные сведения о поставщике WSMan и командлетах WS-Management или введите команду Get-Help wsman в консоли Windows PowerShell.

Дополнительные сведения можно найти в разделе

Справку по ошибкам службы удаленного взаимодействия см. в разделе about_Remote_Troubleshooting.

Источник

Как запустить скрипт PowerShell на удаленном компьютере👨⚕️

Функциональность удаленного выполнения команд в PowerShell называется PowerShell Remoting (появилась в PowerShell 2.0) и основана на возможностях протокола Web Services for Management (WS-Management). С PowerShell Remoting вы можете запускать команды на одном или нескольких удаленных компьютерах. Вы можете использовать интерактивный режим сеанса с удаленными компьютерами, временным или постоянным соединением. В этой статье мы рассмотрим несколько примеров использования PowerShell для запуска сценария на удаленном компьютере.

Для удаленного подключения к компьютеру через PowerShell на нем должна быть включена и настроена WinRM (служба удаленного управления Windows) (по умолчанию она отключена). Связь между компьютерами осуществляется по протоколам HTTP или HTTPS, а весь сетевой трафик между компьютерами зашифрован. Вы можете использовать NTLM и Kerberos для аутентификации на удаленном компьютере.

Чтобы проверить состояние службы WinRM, выполните следующую команду:

powershell как запустить скрипт на удаленном компьютере

Как видите, служба WS-Management работает.

Чтобы интерактивно подключиться к удаленному компьютеру Server1 через PowerShell, выполните следующую команду:

Представление CLI PoSh изменится.

В начале строки будет указано имя удаленного компьютера, к которому вы подключены через WinRM.

После того как сеанс установлен, все команды, которые вводятся в консоли PowerShell, выполняются на удаленном компьютере.

PS Remoting работает следующим образом: команды, введенные на локальном компьютере, передаются на удаленный компьютер и выполняются там, затем результат передается обратно.

Поскольку все команды выполняются локально, нет необходимости беспокоиться о совместимости с версией и модулями PoSh.

Для завершения интерактивного сеанса выполните команду:

Только простые задачи удаленного управления обычно выполняются на компьютерах в интерактивном режиме.

Чтобы выполнить сложную команду или запустить скрипт PowerShell удаленно, используйте командлет Invoke-Command.

Следующая команда создаст удаленное соединение с компьютером Server1 и запустит блок команд, указанный в параметре ScriptBlock. После этого удаленный сеанс автоматически закроется.

PowerShell позволяет запускать локальные скрипты PS1 на удаленных компьютерах.

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

Вы можете использовать не только локальный скрипт, но также скрипт PS в общей сетевой папке, доступ к которой можно получить с локального компьютера.

Вы можете сохранить список компьютеров в текстовом файле и удаленно выполнить скрипт PS на всех компьютерах:

По умолчанию он отправляет скрипт PS1 одновременно 32 удаленным компьютерам из списка.

Если имеется более 32 компьютеров, то PoSh отслеживает состояние выполнения скриптов на первых 32 компьютерах, а если скрипт завершен, команда выполняется на следующем компьютере.

С параметром ThrottleLimit вы можете увеличить этот предел, но будьте осторожны, чтобы не перегружать вашу сеть.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *