PsExec v 2.34

7 способов выполнить команду на удалённом компьютере

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

Так как задача эта популярная, то и способов её решения существует множество. Начиная от групповых политик (в которых можно применять для этой цели сценарии входа в систему или автозагрузки), и заканчивая мощными системами управления, вроде System Center Essentials или System Center Configuration Manager. Но я в этой статье хочу рассмотреть методы, которые доступны сразу из командной строки или файлов сценариев, а также не требуют предварительной установки агентов и прочей суматохи. Впрочем, какие-то предварительные требования конечно есть. Например, у вас должны быть административные полномочия на том компьютере, на котором вы хотите выполнить команду (за исключением сценария с «проксированием», но об этом позже).

Установка

Просто скопируйте PsExec на путь к исполняемому файлу. При вводе PsExec отображается его синтаксис использования.

ознакомьтесь с разделом 2004 июля Windows ит Pro Magazine для получения статьи о пометке , посвященной расширенному использованию PsExec.

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

Параметр Описание
-a Отдельные процессоры, на которых приложение может работать с запятыми, где 1 — это наименьший номер ЦП. Например, чтобы запустить приложение на ЦП 2 и ЦП 4, введите: «-a 2, 4»
-c Скопируйте указанный исполняемый файл в удаленную систему для выполнения. Если этот параметр не задан, приложение должно находиться в системном пути в удаленной системе.
-d Не дожидаться завершения процесса (не интерактивного).
-e Не загружает профиль указанной учетной записи.
-f Копирование указанной программы, даже если файл уже существует в удаленной системе.
-i Запустите программу, чтобы она взаимодействовала с рабочим столом указанного сеанса в удаленной системе. Если сеанс не указан, процесс выполняется в сеансе консоли. Этот флаг необходим при попытке запуска консольных приложений в интерактивном режиме (с перенаправленным СТАНДАРТным вводом-выводом).
-h Если целевая система находится в системе Vista или более поздней версии, процесс выполняется с маркером повышенной безопасности учетной записи, если он доступен.
-l Запустите процесс от имени ограниченного пользователя (поменяет группу администраторов и разрешает только привилегии, назначенные группе Пользователи). в Windows Vista процесс выполняется с низкой целостностью.
-n Указывает время ожидания в секундах при подключении к удаленным компьютерам.
-p Указывает необязательный пароль для имени пользователя. Если этот параметр не указан, будет предложено ввести скрытый пароль.
-r Указывает имя удаленной службы для создания или взаимодействия с.
-s Запустите удаленный процесс в системной учетной записи.
-u Указывает необязательное имя пользователя для входа на удаленный компьютер.
-v Скопируйте указанный файл только в том случае, если он имеет более высокий номер версии или более новый, чем тот, который находится в удаленной системе.
-w Задайте рабочий каталог процесса (относительно удаленного компьютера).
-x Отображение пользовательского интерфейса на безопасном рабочем столе Winlogon (только в локальной системе).
— приоритет Указывает-Low,-BelowNormal,-AboveNormal,-High или-реального времени для запуска процесса с другим приоритетом. Используйте-Background для запуска с нехваткой памяти и приоритетом ввода-вывода в Vista.
компьютерами Direct PsExec для запуска приложения на удаленном компьютере или указанных компьютерах. Если опустить имя компьютера, программа PsExec запустит приложение в локальной системе и при указании подстановочного знака ( *) программа PsExec выполнит команду на всех компьютерах в текущем домене.
@file PsExec выполнит команду на каждом из компьютеров, перечисленных в файле.
cmd Имя выполняемого приложения.
даваемых Аргументы для передачи (Обратите внимание, что пути к файлам должны быть абсолютными путями в целевой системе).
-AcceptEula Этот флаг подавляет отображение диалогового окна лицензии.

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

Входные данные передаются в удаленную систему только при нажатии клавиши ВВОД. При нажатии клавиш CTRL + C удаленный процесс завершается.

Если не указать имя пользователя, процесс будет выполняться в контексте вашей учетной записи в удаленной системе, но не будет иметь доступа к сетевым ресурсам (так как это олицетворение). Укажите допустимое имя пользователя в DomainUser синтаксисе, если удаленный процесс требует доступа к сетевым ресурсам или для запуска в другой учетной записи. Обратите внимание, что пароль и команда шифруются при передаче в удаленную систему.

Коды ошибок, возвращаемые PsExec, относятся к выполняемым приложениям, а не PsExec.

Скачать PsExec (PsTools)

Как уже было сказано, PsExec является частью PsTools, который является частью Sysinternals от Microsoft. Набор программ PsTools распространяется бесплатно, ссылка на скачивание: https://download.sysinternals.com/files/PSTools.zip

Поскольку все утилиты имеют интерфейс командной строки, то если вы совсем не ориентируетесь в командной строке Windows (например, даже не знаете, как её открыть), то вначале ознакомьтесь со статьёй «Настройка рабочего окружения PowerShell в Windows и Linux».

Распакуйте скаченный архив, например, в папку PSTools.

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

1. Перед запуском программ перейти в папку со скаченными исполнимыми файлами, например, у меня это папка C:UsersMiAlDownloadsPSTools, тогда, используя команду cd, в папку с файлами я перехожу следующим образом:

2. Скопировать папку PSTools в директорию C:WindowsSystem32 тогда все файлы PSTools будут доступны следующим образом:

Выберите любой вариант, который вам удобнее.

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

Общий синтаксис запуска программы PsExec выглядит так:

Рассмотрим несколько примеров для понимания работы утилиты PsExec.

1. Узнаем конфигурацию сетевого интерфейса компьютера в сети.

Запускаем программу psexec с указанием ip-адреса удаленного компьютера и командой, которую нужно выполнить.

В этом примере запуск выполняется для компьютера, находящегося в домене и cmd работает от имени пользователя, состоящего в группе «Администраторы домена». Поэтому в параметрах запуска psexec не указаны логин и пароль администратора удаленного компьютера.

Для выполнения PsExec на компьютере от имени локального администратора удаленного компьютера необходимо запустить утилиту с параметрами: -u (имя пользователя) -p (пароль пользователя).

2. Запускаем исполняемый файл со своего компьютера на удаленный.

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

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

Если запустить psexec без параметра -с, то указанная директория с запускаемым файлом будет запрашиваться на удаленной системе.

С параметром -с может применяться -f и -v, которые используются для того чтобы перезаписать копируемый файл, если он уже существует. Это может понадобиться, если были внесены изменения в файл и его нужно повторно запустить в удаленной системе.

3. Запуск PsExec на нескольких компьютерах.

Запуск psexec на двух или трех удаленных компьютерах можно выполнить путем перечисления их имен или ip-адресов.

Когда целевых компьютеров десятки, то перечислять их каждый раз через запятую неудобно. В этом случае можно воспользоватся параметром @ и указать текстовый файл, в котором будет задан список ip адресов компьютеров.

4. Подключение к командной строке Windows удаленного компьютера.

После запуска cmd поменялось окно приветствия — это означает, что в терминал загрузилась среда исполнения команд удаленного компьютера.

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

Через реестр

Модификация реестра на пользовательских машинах ― странный вариант, лишь на случай крайней необходимости. Можно использовать ветки Run или RunOnce. Подробнее о них ― в документации. Сама модификация реестра может проводиться через групповые политики или из командной строки ― например, такой командой:

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

Есть и другие способы, такие как правка ярлыков в папке «Автозагрузка» или добавление в ярлык к популярной программе && script.cmd, но эти методы уже из серии «можно, но не нужно».

Теперь перейдем к новым инструментам.

Управление «один к одному»

Самый простой способ удаленного управления — интерактивно открыть удаленную сессию и в ней выполнить нужные действия. Например, откроем сессию на компьютер SRV4 и рестартуем на нем сервис печати:

Enter-PSSession -ComputerName SRV4
Restart-Service -Name spooler

Посмотрим состояние сервиса и закроем удаленную сессию:

Get-Service -Name spooler
Exit-PSSession

интерактивная сессия в PowerShell

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

Invoke-Command -ScriptBlock -ComputerName SRV4

Эта команда откроет удаленную сессию на SRV4, выполнит блок команд, указанный в параметре -ScriptBlock , и закроет сессию. А чтобы задание выполнялось в фоновом режиме, дополнительно можно указать параметр -AsJob .

выполнение команды на удаленном компьютере

Cледует помнить о том, что при работе в фоновом режиме PowerShell не возвращает результат. Для его получения придется воспользоваться командлетом Receive-Job .

выполнение команды на удаленном компьютере в фоновом режиме

Для того, чтобы выполнить не пару-тройку команд, а какой либо скрипт, у Invoke-Command есть параметр –FilePath , который можно использовать вместо –ScriptBlock для определения файла сценария. Для примера я создал скрипт, который выводит список остановленных служб и запустил его на удаленной машине SRV4:

Invoke-Command -FilePath .script.ps1 -ComputerName SRV4

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

PsGetSid

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

Инвентаризация

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

Инвентаризация

Имеется возможность автоматического составления отчетов по указанным компьютерам, с возможностью экспорта в HTML или XML формате.

Для доступа к удаленному рабочему столу RMS использует свой собственный протокол. Однако, имеется возможность подсоединиться через RMS к удаленному компьютеру, используя протокол RDP (Remote Desktop Protocol) компании Microsoft Corporation.

Для прямого соединения, внутри локальной или корпоративной сети, нет необходимости, чтобы на удаленном компьютере был установлен RMS Хост, т.е. возможно прямое соединение по RDP. Но, в случае если необходим доступ по RDP через интернет, а прямого IP адреса нету, на помощь приходит наша разработка — RDP over ID (RDP через ID). Данная возможность позволяет соединяться по протоколу RDP через наш Internet-ID канал. Это дает возможность обойти сетевые экраны и NAT. В этом случае, на удаленном компьютере должен быть установлен RMS Хост.

Adblock
detector