Утилиты пакета PStools.    Быстрый переход к описанию утилит пакета: PsExec PsFile PsGetSID PsInfo PsKill PsList PsLoggedOn PsLogList PsPasswd PsService PsShutdown PsSuspend Примеры использования в командных файлах FePSTools - графический интерфейс для командной строки PSTools     Все утилиты пакета PStools работают во всех версиях Windows старше Windows NT и не требуют инсталляции. Позволяют осуществлять не только управление локальным компьютером, но и удаленное администрирование без установки на удаленном компьютере какого-либо программного обеспечения. Для большинства действий, выполняемых утилитами PsTools требуются административные привилегии.     Запуск утилит осуществляется из командной строки. В Windows Vista/7/8 нужен запуск от имени администратора. Справку по конкретной утилите можно получить задав ключ -?. Использование: 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/10 используется изоляция сеанса, в котором работают системные службы, от сеанса пользователя (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 "папка приложения" "приложение" psgetsid.exe mydomain.ru\admin - выдать SID пользователя admin домена mydomain.ru pssetsid admin - выдать SID пользователя admin данного компьютера psgetsid S-1-5-21-854245398-1035525444-1417001333-1123 - выдать имя пользователя по SID 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 [\\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.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.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 [\\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 [\\[computer[,computer,[,...]|Domain]|@file] [-u Username [-p Password]]] Username [NewPassword] Username - имя пользователя, для которого будет изменен пароль. NewPassword - новый пароль. Использование: 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 -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 [-r] [\\RemoteComputer [-u Username [-p Password]]] < process Id or name > -r -продолжить работу ранее приостановленной службы. process Id or name - имя или идентификатор процесса. Можно получить с помощью ранее рассмотренной утилиты PsList. Примеры использования PSTools в командных файлах.    Создадим командный файл, выполняющий поиск в локальной сети компьютеров с выполняющейся программой, имя которой (начальная часть имени) задается в качестве параметра при запуске, например, 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 будет выглядеть следующим образом: 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\system32. Пользователь, запускающий его, должен обладать правами администратора по отношению к сканируемым компьютерам. И, если текущий пользователь таковым не является, то в параметры запуска утилит PSlist.exe и PSkill.exe нужно добавить ключи, задающие имя пользователя и пароль. Этот командный файл несложен, но на практике не всегда применим, особенно когда в диапазоне IP- адресов есть большое количество выключенных компьютеров. Время выполнения в этом случае может быть неприемлемо большим. Для решения проблемы можно использовать опрос компьютеров по списку, полученному из сетевого окружения. Пример использования подобного приема найдете в статье "Командные файлы". Примеры использования утилиты PsShutdown в командных файлах можно найти в статье, посвященной планировщику NNcron.     Веб-узел Sysinternals был создан в 1996 г. Марком Руссиновичем (Mark Russinovich) и Брюсом Когсвеллом (Bryce Cogswell) для размещения созданных ими усовершенствованных сервисных программ и технической информации, а в июле 2006 г. корпорация Microsoft приобрела компанию Sysinternals. После этого события, утилиты 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 ...     При возникновении проблем с кодировкой кириллицы в командной строке, запустите редактор реестра и перейдите к разделу HKEY_CURRENT_USER\Console измените строковый параметр FaceName на Lucida Console и добавьте параметр типа REG_DWORD c именем CodePage присвоив ему десятичное (не шестнадцатеричное !!!) значение 1251. При работе в окне командного процессора, сменить кодовую страницу, можно с помощью команды CHCP CHCP - вывести номер текущей кодовой страницы CHCP 866 - установить кодовую страницу 866 (DOS) CHCP 1251 - установить кодовую страницу 1251 (Windows) Графическая оболочка для командной строки утилит PSTools .Front-end for PsTools (FePsTools) - программа графического интерфейса вокруг командной строки утилит пакета PsTools. Позволяет упростить создание нужных параметров для основных утилит пакета. В процессе заполнения полей и установки флажков, программа формирует требуемую для выполнения выбранной утилиты, командную строку, которую можно скопировать в буфер обмена, создать для нее ярлык, или выполнить непосредственно из среды FePsTools. Программа написана под .NET Framework 2.0 или старше. Инсталляция не требуется, но при первом запуске необходимо указать в настройках путь к используемому на данном компьютере пакету утилит PsTools - File - Settings - PsTools Directory. Ниже приведены ссылки для скачивания пакета PSTools. Набор утилит устаревшей версии 2.44 бывает полезен, когда возможности обновленных версий не устраивают Вас по каким-либо причинам. Устаревшая версия Pstools 2.44. ( приблизительно 1 Мб ) Страница для скачивания текущей версии PSTools на сайте Microsft ( приблизительно 2 Мб ) FePstools версии 2.0 ( приблизительно 370 кб ) Если вы желаете поделиться ссылкой на эту страницу в своей социальной сети, пользуйтесь кнопкой "Поделиться" |