Все утилиты пакета PStools
работают в Windows NT, Windows 2000, Windows XP, Windows Server 2003 и
не требуют инсталляции. Позволяют осуществлять не только управление
локальным компьютером, но и удаленное администрирование без установки
на удаленном компьютере какого-либо программного обеспечения.
Запуск утилит осуществляется из командной строки. Справку по конкретной утилите можно получить задав ключ -?.
- 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
Учтите, что в таком режиме использования
редактора реестра вы получаете права на создание, изменение и удаление
даже таких ключей, которые доступны только процессам ядра.С точки зрения системного администрирования 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 >
process Id or name — имя или идентификатор удаленного процесса (его можно получить с помощью PsList.exe).
Кстати, с помощию PsKill можно принудительно получить
перезагрузку или даже «синий экран смерти» (BSOD- Blue Screen Of
Death), если завершать системные процессы (lsass, winlogon и т.п.)
- 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.Примеры использования в командных файлах.
Если у вас возникнут затруднения при понимании нижеизложенного — почитайте статью » Командные файлы «.
Создадим командный файл, выполняющий поиск в
локальной сети компьютеров с выполняющейся программой, имя которой
(начальная часть имени) задается в качестве параметра при запуске,
например, game . При обнаружении будет
послано сообщение на компьютер ADMINCOMP и обнаруженое приложение будет
принудительно завершено. Для поиска будем использовать утилиту
Pslist.exe и анализировать ее код возврата. Значение переменной
ERRORLEVEL равное нулю означает, что утилита обнаружила на удаленном
компьютере процесс, удовлетворяющий условиям поиска. Имя процесса для
поиска будем задавать в качестве параметра при запуске командного файла.
Присвоим нашему командному файлу имя psl.bat. Запуск с параметром будет выглядеть следующим образом:
psl.bat game
Для начала, нужно проверить, задан ли параметр в
командной строке при запуске, и, если не задан, выдадим сообщение
пользователю и завершим выполнение. Если же параметр задан — перейдем на
метку » PARMOK «:
@echo off
if «%1» NEQ «» GOTO PARMOK
ECHO Нужно задать имя процесса для поиска
exit
:PARMOKТеперь нужно обеспечить последовательное
формирование IP-адресов компьютеров для командной строки PSlist. Проще
всего это сделать с помощью присвоения временной переменной окружения
(действительной только на время выполнения командного файла) значения
постоянной составляющей адреса (например — 192.168.0.) и вычисляемого
значения младшей части (например, в диапазоне 1-254). Для примера
будем считать, что нам необходимо просканировать компьютеры в диапазоне
адресов:
192.168.0.1 — 192.168.0.30:
set IPTMP=192.168.0. — старшая часть адреса
set /A IPLAST=1 — младшая часть. Ключ /A означает вычисляемое числовое выражение
set IPFULL=%IPTMP%%IPLAST% — значение полного IP-адреса.
Командная строка для PSlist будет выглядеть cледующим образом:
pslist \\%IPFULL% %1
Теперь осталось только циклически запускать PSlist,
прибавляя в каждом цикле единицу к младшей части адреса, пока ее
значение не достигнет 30 и анализировать значение ERRORLEVEL после
выполнения. Для анализа результата будем выполнять переход командой:
GOTO REZULT%ERRORLEVEL%
обеспечивающей переход на метку REZULT0 при обнаружении процесса и на REZULT1 — при его отсутствии.
Окончательное содержимое командного файла:@echo off
if «%1» NEQ «» GOTO PARMOK
ECHO Нужно задать имя процесса для поиска
exit
:PARMOK
set IPTMP=192.168.0.
rem Зададим начальное значение » хвоста » IP- адреса
set /A IPLAST=1
rem M0 — метка для организации цикла
:M0
rem Переменная IPFULL — полное значение текущего IP-адреса
set IPFULL=%IPTMP%%IPLAST%
rem Если » хвост «больше 30 — на выход
IF %IPLAST% GTR 30 GOTO ENDJOB
pslist \\%IPFULL% %1
GOTO REZULT%ERRORLEVEL%
:REZULT0
rem Если найдено приложение- отправим сообщение на ADMINCOMP
net send ADMINCOMP Запущено %1 — %IPFULL%
rem И завершим приложение с помощью PSkill
pskill \\%IPFULL% %1
:REZULT1
rem Сформируем следующий IP-адрес
set /A IPLAST=%IPLAST% + 1
rem Перейдем на выполнение следующего шага
GOTO M0
rem Завершение работы
:endjob
exitВ заключение добавлю, что для того, чтобы этот скрипт
работал, PSlist.exe и PSkill.exe должны быть доступны в путях поиска
исполняемых файлов, например в каталоге WINDOWS. Пользователь,
запускающий его, должен обладать правами администратора по отношению к
сканируемым компьютерам. И, если текущий пользователь таковым не
является, то в параметры запуска утилит PSlist.exe и PSkill.exe нужно
добавить ключи, задающие имя пользователя и пароль.
Этот командный файл несложен, но на практике не всегда применим,
особенно когда в диапазоне IP- адресов есть большое количество
выключенных компьютеров. Время выполнения в этом случае может быть
неприемлемо большим. Для решения проблемы можно использовать опрос
компьютеров по списку, полученному из сетевого окружения. Пример
использования подобного приема найдете в статье «Командные файлы».Примеры использования утилиты PsShutdown в командных файлах можно найти в статье, посвященной планировщику NNcron.
Веб-узел Sysinternals был создан в 1996 г. Марком
Руссиновичем (Mark Russinovich) и Брюсом Когсвеллом (Bryce Cogswell)
для размещения созданных ими усовершенствованных сервисных программ и
технической информации, а в июле 2006 г. корпорация Microsoft приобрела
компанию Sysinternals. Раздел Sysinternals в Microsoft TechNet.
После этого события, утилиты PsTools при первом запуске требуют
подтверждения лицензионного соглашения в графическом окне, что может
вызвать некоторые неудобства в случае, когда нет возможности сделать это
подтверждение. Для решения данной проблемы используйте запуск утилит с
ключем /accepteula (хотя бы 1 раз) или создайте командный файл с
нужными вам утилитами пакета и выполните его на используемом
компьютере:psexec.exe /accepteula
psfile.exe /accepteula
psgetsid.exe /accepteula
Psinfo.exe /accepteula
pskill.exe /accepteula
pslist.exe /accepteula
psloggedon.exe /accepteula
psloglist.exe /accepteula
pspasswd.exe /accepteula
psservice.exe /accepteula
psshutdown.exe /accepteula
pssuspend.exe /accepteula