Легендарная утилита от не менее легендарного Марка Руссиновича, предназначена для выполнения команд или програм на удаленном компьютере — что для системного администратора задача довольно-таки распространенная. Исполняемый файл утилиты можно скопировать в System32 для удобства вызова из командной строки (или PowerShell), альтернативой станет создание переменной окружения.

Механизм работы утилиты следующий — внутри исполняемого файла PsExec содержится еще один исполняемый файл, PsExecSvc, который является службой Windows. При подключении к удаленному компьютеру PsExec распаковывает PsExecSvc в скрытую административную папку Admin$ на удаленном PC (%SystemRoot%\System32), после чего, используя WinAPI, PsExecSvc устанавливается в качестве службы и устанавливает соединение с PsExec. Все команды которые передаются в PsExec в конечном итоге выполняются службой PsExecSvc на удаленном PC. По завершению работы PsExec служба PsExecSvc останавливает саму себя и удаляет исполняемый файл с удаленного компьютера.

Синтаксис команд покажу на примере запуска сеанса командной строки:

PsExec.exe \\192.168.1.2 -u Admin -p 12345 -s cmd.exe

где u — имя пользователя, p — пароль, s — аргумент запуска целевой программы (cmd.exe) из-под учетной записи системы (nt authority\system). Проверить от имени какого пользователя запущен сеанс командной строки можно командой whoami. Подробный список аргументов привожу ниже:

-u — имя пользователя. Если опущено — то будет использовано имя текущего пользователя.
-p — пароль. Если опущен, то будет запрошен программой.
-s — выполнить приложение с локальными системными правами (Local system account).
-e — использовать указанный профиль пользователя.

-h — для запуска программы в режиме повышения полномочий (privilege elevation). Может потребоваться в операционных системах Windows Vista и выше для запуска некоторых программ, вносящих изменения в настройки системы (например, regedit)
-i — разрешить удаленной программе взаимодействовать с рабочим столом на удаленном компьютере. Если ключ не задан, то выполнение удаленной программы происходит незаметно для пользователя удаленного компьютера.
-c — копировать указанную программу на удаленный компьютер перед выполнением. Если ключ опущен, то программа для выполнения должна присутствовать на удаленном компьютере в путях поиска, задаваемых переменной окружения path.
-f — выполнять копирование даже при наличии исполняемого файла на удаленном компьютере.
-v — выполнять копирование только в случае, если исполняемый файл имеет более позднюю версию.
-d — не ждать завершения удаленного процесса.
-w — установить рабочий каталог для удаленного процесса.
-priority — приоритет для удаленного процесса. Может принимать значения (в порядке возрастания) -low, -belownormal, -abovenormal, -high, -realtime.
-a — указание процессоров (для мультипроцессорных систем) на котором будет выполняться приложение. Например — для CPU 1, CPU 4, ключ: «-a 1,4»

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

Кроме своего непосредственного назначения есть еще один достойный внимания способ использования утилиты PsExec. Если не указывать имя компьютера, то по умолчанию команда выполнится в локальной системе. Используя ключ -s можно запустить, например, редактор реестра от имени учетной записи системы — что позволит получить доступ к скрытым разделам реестра SAM и SECURITY. Или использовать этот метод для отладки программ.

Ссылка на архив с PsTools ниже — в его состав и входит PsExec

PsTools