WINRS — удалённое выполнение команд через WS-Management

WINRS (Windows Remote Shell) выполняет команды на удалённых компьютерах через протокол WS-Management без RDP. Требует настроенного WinRM на обоих хостах.

WINRS — удалённое выполнение команд через WS-Management

WINRS (Windows Remote Shell) — встроенная CMD-утилита для выполнения команд и запуска программ на удалённых компьютерах Windows через протокол WS-Management (WinRM). В отличие от RDP, WINRS работает исключительно в командной строке и не требует графического сеанса, что делает её незаменимой для пакетного администрирования серверов.

Синтаксис команды WINRS

winrs [-/переключатель[:значение]] команда

Плейсхолдеры:

  • команда — любая команда CMD или путь к исполняемому файлу, которую нужно выполнить на удалённом хосте.
  • Все ключи начинаются с дефиса (-) или косой черты (/) — оба варианта равнозначны.

Ключи и параметры

Ключ Описание Пример
-r:<хост> Имя или IP-адрес удалённого компьютера (обязательный параметр) -r:192.168.1.10
-u:<имя> Имя пользователя для аутентификации на удалённом хосте -u:Administrator
-p:<пароль> Пароль пользователя. При пропуске будет запрошен интерактивно -p:P@ssw0rd
-d:<каталог> Рабочий каталог на удалённом компьютере, в котором выполняется команда -d:C:\Scripts
-env:<ПЕРЕМ>=<знач> Задаёт переменную среды для удалённого процесса -env:TMP=C:\Temp
-noecho Отключает отображение вводимых команд в интерактивном режиме -noecho
-noprofile Не загружать профиль пользователя на удалённом хосте -noprofile
-allowdelegate Разрешить делегирование учётных данных (для доступа к сетевым ресурсам с удалённого хоста) -allowdelegate
-usessl Использовать HTTPS (порт 5986) вместо HTTP (порт 5985) -usessl
-? Вывести справку по синтаксису команды winrs -?

Примеры использования

Выполнение простой команды на удалённом хосте

Получить сетевую конфигурацию компьютера Server01 из локальной сети без подключения по RDP.

winrs -r:Server01 ipconfig /all

Результат команды ipconfig /all будет выведен в локальную консоль.

Подключение с явными учётными данными

Если текущий пользователь не имеет прав на удалённом хосте, укажите логин и пароль явно.

winrs -r:192.168.1.50 -u:DOMAIN\Admin -p:Secret123 hostname

Команда hostname вернёт имя компьютера 192.168.1.50.

Запуск PowerShell-скрипта на удалённом компьютере

WINRS позволяет запускать PowerShell как процесс на удалённой машине.

winrs -r:Server02 powershell -ExecutionPolicy Bypass -File "C:\Scripts\report.ps1"

Скрипт report.ps1 выполнится на Server02, вывод появится в локальной консоли.

Выполнение команды в заданном каталоге

Ключ -d задаёт рабочий каталог на удалённой машине — полезно для bat-файлов с относительными путями.

winrs -r:BuildServer -d:C:\Build cmd /c "build.bat release"

Скрипт build.bat запустится из каталога C:\Build на BuildServer.

Интерактивный удалённый сеанс CMD

Без явной команды WINRS открывает интерактивный сеанс командной строки на удалённом хосте.

winrs -r:Server01 cmd

Введите exit, чтобы завершить удалённый сеанс и вернуться в локальную консоль.

Использование HTTPS для шифрования трафика

В средах с повышенными требованиями к безопасности используйте зашифрованное соединение на порту 5986.

winrs -r:https://SecureServer:5986 -usessl -u:Admin -p:Pass ipconfig

Требуется действующий SSL-сертификат на стороне сервера и включённый HTTPS-listener WinRM.

Получение списка процессов на удалённом хосте

Быстрый мониторинг запущенных процессов без GUI-инструментов.

winrs -r:Server03 tasklist /FO TABLE

Вывод будет отформатирован таблицей — удобно для парсинга в скриптах.

Частые ошибки и решения

Ошибка Причина Решение
WinRM не может завершить операцию / нет соединения Служба WinRM не запущена или не настроена на удалённом хосте На удалённом хосте выполнить winrm quickconfig с правами администратора
Отказано в доступе при верных учётных данных Учётная запись не входит в группу «Пользователи удалённого управления» или локальных администраторов Добавить пользователя в группу Remote Management Users на целевом хосте
Ошибка подключения к хосту в рабочей группе (не домен) WINRS по умолчанию доверяет только хостам в домене Добавить хост в список доверенных: winrm set winrm/config/client @{TrustedHosts="IP_или_имя"}
Команда выполняется, но вывод не отображается Программа пишет в stderr, а не stdout, либо требует интерактивного ввода Добавить перенаправление: команда 2>&1; для интерактивных программ использовать winrs -r:хост cmd
Ошибка SSL-сертификата при -usessl Самоподписанный или просроченный сертификат на сервере Установить действующий сертификат или добавить исключение через политику WinRM

Когда применять, а когда нет

Используйте WINRS, когда нужно быстро выполнить одну команду или запустить скрипт на удалённом Windows-сервере без открытия RDP-сессии. Это удобно для пакетных операций: сбор данных, перезапуск служб, запуск сборок. Не применяйте WINRS для задач, требующих графического интерфейса или интерактивного ввода с паролями — используйте RDP или PSSession. Команда работает только при включённом и настроенном WinRM (TCP 5985/5986). В PowerShell функциональным аналогом является Invoke-Command -ComputerName, который предоставляет более богатые возможности: передачу объектов, параллельное выполнение, поддержку PSRemoting.

FAQ

Нужно ли настраивать что-то перед первым использованием WINRS?

Да. На удалённом компьютере необходимо включить службу WinRM командой winrm quickconfig с правами администратора. На клиенте — добавить удалённый хост в список доверенных, если он не в том же домене.

Чем WINRS отличается от PsExec?

WINRS использует стандартный протокол WS-Management (WinRM), встроенный в Windows, и не требует сторонних утилит. PsExec работает через именованные каналы SMB и устанавливает собственный сервис на удалённом хосте. WINRS предпочтительнее в управляемых корпоративных средах.

Какие порты использует WINRS?

HTTP-режим — TCP 5985, HTTPS-режим (-usessl) — TCP 5986. Убедитесь, что брандмауэр пропускает соответствующий порт.

Можно ли использовать WINRS для работы с Linux?

Нет. WINRS работает только с Windows-хостами, где запущен WinRM. Для управления Linux-серверами используйте SSH или PowerShell с OpenSSH-ремотингом.

Как запустить команду сразу на нескольких серверах?

WINRS не поддерживает несколько хостов в одной команде. Для параллельного выполнения используйте PowerShell: Invoke-Command -ComputerName Server1,Server2 -ScriptBlock { команда }.

Видит ли удалённый пользователь, что на его ПК выполняется команда?

Нет видимых уведомлений. Процесс запускается в фоне от имени указанного пользователя. При необходимости аудита включите журнал событий WinRM на целевом хосте.

Оцените статью
( Пока оценок нет )
MW10
Добавить комментарий

Нажимая на кнопку "Отправить комментарий", я даю согласие на обработку персональных данных и принимаю политику конфиденциальности.