
Утилиты пакета PSTools
Список утилит:
PsExec
PsFile
PsGetSID
PsInfo
PsKill
PsList
PsLoggedOn
PsLogList
PsPasswd
PsService
PsShutdown
PsSuspend
Все утилиты пакета PStools работают во всех версиях Windows старше Windows NT и не требуют инсталляции. Позволяют осуществлять не только управление локальным компьютером, но и удаленное администрирование без установки на удаленном компьютере какого-либо программного обеспечения. Для большинства действий, выполняемых утилитами PsTools требуются административные привилегии.
Запуск утилит осуществляется из командной строки. В Windows Vista/7/8 нужен запуск от имени администратора. Справку по конкретной утилите можно получить задав ключ -?.
PsExec
Позволяет выполнить приложение на локальном или удаленном компьютере. Естественно, при наличии соответствующих прав доступа. Большинство ключей командной строки, используемые для PSexec, используются и для других утилит пакета, поэтому будут рассмотрены подробно.
Использование:
psexec.exe [\\computer[,computer2[,...] | @file][-u user [-p psswd]][-s|-e][-i][-c [-f|-v]][-w directory][-d][-priority][-a n,n,...] cmd [arguments]
computer - имя или IP-адрес компьютера. Если пропущено - то приложение запускается на локальном компьютере. Если используется шаблон (\\*), PsExec выполнит приложение на всех компьютерах текущего домена.
@file - имя файла со списком компьютеров для выполнения.
-u - имя пользователя. Если опущено - то будет использовано имя текущего пользователя.
-p - пароль. Если опущен, то будет запрошен программой.
-s - выполнить приложение с локальными системными правами (Local system account).
-e - использовать указанный профиль пользователя.
-i - разрешить удаленной программе взаимодействовать с рабочим столом на удаленном компьютере. Если ключ не задан, то выполнение удаленной программы происходит незаметно для пользователя удаленного компьютера.
-c - копировать указанную программу на удаленный компьютер перед выполнением. Если ключ опущен, то программа для выполнения должна присутствовать на удаленном компьютере в путях поиска, задаваемых переменной окружения path.
-f - выполнять копирование даже при наличии исполняемого файла на удаленном компьютере.
-v - выполнять копирование только в случае, если исполняемый файл имеет более позднюю версию.
-d - не ждать завершения удаленного процесса.
-w - установить рабочий каталог для удаленного процесса.
-priority - приоритет для удаленного процесса. Может принимать значения (в порядке возрастания) -low, -belownormal, -abovenormal, -high, -realtime.
-a - указание процессоров (для мультипроцессорных систем) на котором будет выполняться приложение. Например - для CPU 1, CPU 4, ключ: "-a 1,4"
program - имя приложения для выполнения на удаленной системе.
arguments - аргументы для удаленного приложения. Пути файлов должны задаваться относительно удаленного компьютера и имена файлов или каталогов, содержащие пробелы должны заключаться в двойные кавычки, например - "C:\Program Files\User Folder\Programm.exe"
Ввод с клавиатуры направляется на удаленный компьютер, нажатие Ctrl-C завершит удаленный процесс. Если не задано имя пользователя, то удаленный процесс будет выполнен на удаленной системе с правами локальной системной учетной записи, т.е. без доступа к сетевым ресурсам, даже если ваша учетная запись на удаленной системе дает вам такой доступ. Поэтому, если удаленному приложению требуется доступ к сетевым ресурсам, задавать имя пользователя в формате "Domain\User" обязательно. Код возврата (ERRORLEVEL) по завершению Psexec определяется удаленным приложением, что позволяет анализировать результаты выполнения удаленного приложения в командных файлах.
Примеры:
- запустить командный процессор cmd.exe на удаленном компьютере
Psexec.exe \\192.168.0.1 cmd.exe
Psexec.exe \\Comp1 cmd.exe
Psexec.exe \\192.168.0.1 -u vasya -p mypass cmd.exe
Psexec.exe \\192.168.0.1 -u vasya -p mypass -c -f -w C:\ cmd.exe
В результате вы получаете доступ к командной строке на удаленном компьютере и увидите приглашение:
Microsoft Windows 2000 [Версия 5.00.2195]
(С) Корпорация Майкрософт, 1985-2000.
С:\WINNT\system32 >
Теперь команды, вводимые с консоли этого окна будут выполняться на удаленном компьютере. Однако, не стоит запускать на выполнение программы, использующие графический интерфейс, взаимодействие с ними будет невозможно.Вы можете выполнить любую консольную команду на удаленном компьютере.
Примеры:
- получить информацию о настройке TCP/IP
Psexec.exe \\REMOTEPC -u Mydomain\MyUsername -p mypass ipconfig /all
- получить информацию о сетевом окружении на REMOTEPC:
Psexec.exe \\REMOTEPC -u Mydomain\MyUsername -p mypass net view
- послать сообщение от REMOTEPC на другой компьютер (REMOTE2):
Psexec.exe \\REMOTEPC -u Mydomain\MyUsername -p mypass net send REMOTE2 TEXT OF MESSAGE
- подключить диск "C" удаленного компьютера REMOTE2 к удаленному компьютеру REMOTEPC:
Psexec.exe \\REMOTEPC -u Mydomain\MyUsername -p mypass net use X: \\REMOTE2\C
- скопировать каталог C:\TEST с удаленного компьютера REMOTEPC на удаленный компьютер REMOTE2:
Psexec.exe \\REMOTEPC -u Mydomain\MyUsername -p mypass xcopy C:\test\*.* X:\TEST\*.*
- архивировать данные каталога "C:\TEST" удаленного компьютера REMOTEPC на удаленный компьютер REMOTE2:
Psexec.exe \\REMOTEPC -u Mydomain\MyUsername -p mypass arj a X:\ARHIV\test.arj C:\TEST\*.*
Для того, чтобы выполнить командный файл (.bat или .cmd), нужно сначала скопировать его на удаленный компьютер, т.е. обязательно использовать ключ -c. Если в командном файле используются сетевые диски или команды, требующие доступ к сети (например, NET.EXE ), то нужно задать имя пользователя:
Psexec.exe \\192.168.0.1 -u vasya -p mypass -c mycmd.cmd
Иногда необходимо запустить приложение на удаленном компьютере, видимое для его пользователя. Используйте ключ -i:
Psexec.exe \\192.168.0.1 -u vasya -p mypass -i notepad.exe
После запуска блокнота (notepad.exe) PsExec будет ждать его завершения удаленным пользователем. Если в этом ожидании нет необходимости, то нужно использовать ключ -d.
Особенность запуска приложения от имени локальной учетной записи позволяет получить в редакторе реестра (REGEDIT.EXE) доступ к разделам SAM и SECURITY. Для этого нужно запустить удаленно regedit без указания имени пользователя и пароля и использовать "-i":
psexec.exe \\REMOTE -i regedit.exe
После чего на компьютере \\REMOTE запустится редактор реестра с доступными разделами SAM и SECURITY.
Или локально с ключами -s и -i:
psexec.exe -s -i regedit.exe
В Windows Vista/7/8 используется изоляция сеанса, в котором работают системные службы, от сеанса пользователя (Session 0 Isolation), поэтому команда для этих версий ОС будет выглядеть иначе:
psexec -s -i 0 regedit.exe
после чего нужно нажать на кнопку «Просмотреть сообщение» в диалоговом окне «Обнаружение интерактивных служб».
Учтите, что в таком режиме использования редактора реестра вы получаете права на создание, изменение и удаление даже таких ключей, которые доступны только процессам ядра.
С точки зрения системного администрирования PSexec удобно использовать для запуска приложений на всех компьютерах домена (вместо имени компьютера задать - \\*) с правами администратора или под локальной системной учетной записью (ключ -s).
Psexec.exe \\* -s install.exe - запустить install.exe на всех компьютерах домена под системной учетной записью
Ну и последнее - Psexec можно использовать для обхода ошибки типа "Negative delta time", возникающей на многоядерных системах из-за несовпадения счетчиков RTSC (Real Time Stamp Counter) у разных ядер. Для чего приложение запускается с помощью psexec только для одного ядра (ключ -a):
psexec.exe -a 1 -i -w "папка приложения" "приложение"
PsFile
Использование аналогично использованию команды net.exe file, но может выполняться на удаленном компьютере. Выдает список файлов, открытых удаленными пользователями на указанном компьютере и позволяет принудительно их закрывать.
PsGetSid
Выводит на экран уникальный номер, идентифицирующий учетную запись пользователя, группы или компьютера. Он присваивается учетной записи при ее создании (код безопасности). Внутренние процессы Windows обращаются к учетным записям по их кодам безопасности, а не по именам пользователей или групп. Если удалить, а затем снова создать учетную запись с тем же именем пользователя, то предоставленные прежней учетной записи права и разрешения не сохранятся для новой учетной записи, так как их коды безопасности будут разными. Аббревиатура SID образована от Security ID.
psgetsid.exe mydomain.ru\admin - выдать SID пользователя admin домена mydomain.ru
pssetsid admin - выдать SID пользователя admin данного компьютера
psgetsid S-1-5-21-854245398-1035525444-1417001333-1123 - выдать имя пользователя по SID
PsInfo
Выдает системную информацию об удаленной или локальной системе (версия ОС, тип процессора, видеоадаптера, объем ОЗУ, установленное ПО и т.п.).
Использование:
psinfo [-h] [-s] [-d] [-c [-t delimiter]] [\\computer[,computer[,..]]|@file [-u Username [-p Password]]]
Ключи (кроме рассмотренных выше для PSExec):
-h - включить в выдаваемый отчет информацию об установленных обновлениях (hotfixes).
-s - отображать список установленных программ.
-d - отображать информацию о дисках (тип, файловая система, метка тома, размер, объем свободного пространства.
-c - выдавать данные в формате CSV (текстовый файл с данными, разделенными по полям с помощью символа-разделителя - запятой). Вы можете импортировать данные из такого файла в другие приложения, например, в Excel.
-t - позволяет задать символ разделитель в файлах формата CSV, если он должен отличаться от запятой.
PsKill
Принудительно завершить процесс.
Использование:
pskill [\\computer [-u username [-p password]]] < process ID or name >
Если \\computer опущено - то выполняется завершение процесса на локальной машине.
process Id or name - имя или идентификатор процесса (его можно получить с помощью рассматриваемой ниже утилиты PsList.exe).
Кстати, с помощью PsKill можно принудительно получить перезагрузку или даже "синий экран смерти" (BSOD- Blue Screen Of Death), если завершать системные процессы (lsass, winlogon и т.п.)
pskill winword - завершить процесс winword на локальном компьютере
pskill \\comp3 -u admin -p password 620 - завершить процесс с идентификатором 620 на компьютере comp3
pskill \\SERVER -u admin -p password winlogon - завершить процесс winlogon на компьютере SERVER. Будет вызван "синий экран смерти" системы. Подключение к компьютеру SERVER выполняется с использованием имени пользователя admin и пароля password.
PsList
Получить подробную информацию о запущенных процессах на локальной или удаленной системе.
Использование:
pslist.exe [-d][-m][-x][-t][-s [n] [-r n] [\\computer [-u username][-p password][name|pid]
-d - включить в отчет информацию о потоках, выполняемых процессом (thread details).
-m - включить в отчет информацию об использовании памяти (memory).
-x - включить в отчет все вышеперечисленное.
-t - выдать только дерево процессов (tree).
-s [n] - запускаться в режиме диспетчера задач, каждые n секунд (по умолчанию - 1 сек. Для завершения нажать Escape.
-r n - время обновления экрана в режиме диспетчера задач (по умолчанию -1 сек.).
name - выдать информацию только о процессе с именем name. Если имеется несколько процессов с одинаковым именем, (например FAR), то будет выдана информация обо всех процессах, имя которых соответствует name. Если в качестве name задать часть имени, например символ "F", то в отчет попадут сведения о всех процессах, имя которых начинаются с указанной буквы.
pid - выдать информацию о процессе с идентификатором pid. Будет выдана информация только об одном процессе, имеющем идентификатор pid.
PsLoggedOn
Информация о пользователях, вошедших в систему.
Использование:
psloggedon.exe [-l] [-d domain] [-x] [\\computername]
или
psloggedon.exe [username]
-l - показать только локальных пользователей.
-d - показать только пользователей домена domain.
-x - не показывать время входа в систему.
psloggedon.exe -l \\server - Выдать имя локального пользователя компьютера server.
psloggedon.exe \\server - Выдать список всех пользователей, подключенных к компьютеру server.
psloggedon.exe admin -d mydomain.com - Найти в домене mydomain.com компьютер с залогиненым пользователем "admin".
PsLogList
Выдать дамп журнала событий удаленной или локальной системы.
Использование:
psloglist [\\computer[,computer2[,...] | @file] [-u username [-p password]]] [-s [-t delimiter]] [-n # | -d #][-c][-x][-r][-a mm/dd/yy][-b mm/dd/yy] [-f filter] [-i ID,[ID,...]] [-o event source] [-l event log file] event log
-a - выдать данные после указанного времени (after)
-b - выдать данные до указанного времени (before)
-c - очистить журнал событий после выдачи (clear)
-d - выдать записи только за предыдущие n дней
-f - использовать фильтр типов событий (начальная буква i - информация, w - предупреждения, e - ошибки,"-f we" - предупреждения и ошибки)
-i - выдать записи с указанным идентификатором ID (не более 10 ID)
-l - выдать содержимое ранее сохраненного в файл журнала событий
-n - выдавать только первые n записей
-o - выдавать только по источнику события (-o cdrom)
-s -t - ключи формирования выходного потока для строкового поиска
event log - тип журнала ( по умолчанию - System)
Например, выдать в файл otlup.txt информацию об отказе в доступе (событие c id = 529 в журнале Security) на компьютере с адресом 192.168.0.25 за последние 7 дней:
psloglist.exe \\192.168.0.25 -u admin -p admpass -d 7 -i 529 Security > otlup.txt
Выдать в файл errors.txt информацию о предупреждениях и ошибках за последние 3 дня на текущем компьютере в журнале System:
psloglist.exe -u admin -p admpass -d 3 -f we > errors.txt
Если вы не знаете номер идентификатора события, но знаете его смысловое описание, то можно объединить выполнение PSloglist.exe с параметром -s, в цепочку с утилитой findstr.exe, указав последней ключевое слово (несколько слов) для поиска. Первый пример можно было бы выполнить и так:
psloglist.exe \\192.168.0.25 -u admin -p admpass -d 7 Security | findstr -I /C:FAILURE > otlup.txt
Ключ /C: задает строку поиска, ключ -I указывает, что не надо учитывать регистр символов. Если в строке поиска есть пробелы, то ее надо заключить в двойные кавычки - /C:"Audit Failure".
PsPasswd
Сменить пароль на локальной или удаленной системе.
Использование:
pspasswd [\\[computer[,computer,[,...]|Domain]|@file] [-u Username [-p Password]]] Username [NewPassword]
Username - имя пользователя, для которого будет изменен пароль
NewPassword - новый пароль.
PsService
Управление службами на локальной или удаленной системе.
Использование:
psservice.exe [\\Computer [-u Username [-p Password]]] < cmd > < optns >
Cmd может принимать значения:
query -запрос о состоянии службы
config - запрос о конфигурации службы
setconfig - изменение типа запуска службы
start - запустить службу
stop - остановить службу
restart - перезапустить службу
pause - приостановить службу
cont - продолжить работу приостановленной службы
depend - показать список служб, зависящих от указанной
find -найти службу в локальной сети
Примеры:
psservice \\gamerPC -u admin -p admpass query nncron - опросить состояние службы nncron на компьютере gamerPC
psservice -u admin -p admpass setconfig nncron auto - установить на локальном компьютере тип запуска службы в "авто". Возможные варианты - demand - "вручную" и disabled - "отключено".
psservice -u admin -p admpass find "DHCP клиент" - найти службу "DHCP клиент" в локальной сети. Результат - список компьютеров с работающей службой. Если после имени службы задать ключ all - то в список попадут и компьютеры, где служба установлена, но не запущена. И учтите, что имена служб содержащих русские символы должны задаваться в ДОС-кодировке и, при наличии пробелов - заключаться в двойные кавычки.
PsShutdown
Выключить или перезагрузить локальную или удаленную систему.
Использование:
psshutdown -s|-r|-h|-d|-k|-a|-l|-o [-f] [-c] [-t [nn|h:m]] [-m "message"] [-u Username [-p password]] [\\computer[,computer[,...]|@file]
-a - отменить запланированные перезагрузку или отключение
-c - разрешить локальному пользователю отменять перезагрузку или выключение
-d - перевести компьютер в спящий режим
-f - принудительно закрывать запущенные приложения
-h - перевод в режим спящий режим (если поддерживается) с выгрузкой содержимого оперативной памяти на диск с последующим восстановлением после включения
-k - выключить питание (перезагрузка, если выключение питания не поддерживается)
-l - блокировка компьютера
-m - текст сообщения, которое будет выдано пользователю останавливаемого компьютера
-o - завершение сеанса текущего пользователя
-r - перезагрузить (Reboot) компьютер
-s - завершение работы без выключения питания
-t -счетчик времени в секундах до начала завершения работы (если не задан - 20 секунд) или время в 24-часовом формате, когда будет выполнено завершение работы системы
PsSuspend
Приостановка и продолжение служб на удаленной или локальной системе.
Использование:
pssuspend [-r] [\\RemoteComputer [-u Username [-p Password]]] < process Id or name >
-r
- продолжить работу ранее приостановленной службы.
process Id or name - имя или идентификатор процесса. Можно получить с помощью ранее рассмотренной утилиты PsList.