Классическая командная строка Windows представляет довольно ограниченный объем возможностей в сравнении со своим аналогом в Linux. Этот недостаток можно исправить и без установки альтернативных консолей.
В 1999 году в недрах компании Winternals Software LP, возглавляемой небезызвестным Марком Руссиновичем, родилась небольшая утилита PsList, позволяющая просматривать подробную информацию о процессах. С тех пор появился целый ряд программ, объединенных под именем PsTools. Рассмотрим самые интересные из них.
Официальная страница проекта приводит нам список программ с описанием их функций. Там же можно скачать весь набор PsTools целиком.
Программы не требуют установки. Достаточно положить их в один каталог с приложением командной строки, а именно, %WINDIR%\System32.
Рассмотрим самые интересные приложения из пакета PsTools.
PsExec позволяет выполнять приложения на удаленном компьютере из родной командной строки. Синтаксис команды выглядит следующим образом.
psexec.exe [\\computer[,computer2[,…] | @file][-u user [-p psswd]][-n s][-l][-s|-e][-i][-c [-f|-v]][-w directory][-d][-priority][-a n,n,…] program [arguments]
computer — имя или IP-адрес компьютера. Если параметр не указан, команда запустится на локальном компьютере. Если используется шаблон \\*, то PsExec выполнит приложение на всех компьютерах домена;
@file — файл, содержащий список компьютеров, на котором будут выполняться команды;
-u — имя пользователя. Если не указано, то будет выполнено из-под текущего пользователя;
-p — пароль. Если не указан, то будет запрошен при выполнении;
-n — задержка подключения к удаленным компьютерам в секундах;
-l — при запуске процесса пользователю предоставляются ограниченные права (аналогичные группе «пользователи»);
-s — выполнить приложение с локальными системными правами (Local system account);
-e — использовать указанный профиль пользователя.
-i — разрешает программе взаимодействовать с рабочим столом на удаленном компьютере. Если параметр не указан, то выполнение программы происходит незаметно для пользователя удаленного компьютера;
-c — копировать программу на удаленный компьютер перед запуском. Если параметр не указан, то программа для выполнения должна находиться на удаленном компьютере в одном из каталогов, указанных в настройках системной переменной Path;
-f — при указании данного параметра, копирование будет выполнено даже при наличии исполняемого файла на удаленном компьютере;
-v — копирование будет выполнено только, если исполняемый файл имеет более свежую версию;
-w — позволяет указать рабочий каталог для удаленного процесса;
-d — не ждать завершения удаленного процесса;
-priority — приоритет для удаленного процесса. Может принимать значения: -low, -belownormal, -abovenormal, -high, -realtime;
-a — позволяет указать процессоры, которые будут выполнять приложение. Например, для CPU 1 и CPU 3 значение будет иметь вид: -a 1,3;
program — имя исполняемого на удаленной системе приложения;
arguments — аргументы для удаленного приложения. Пути файлов следует задавать относительно удаленного компьютера. Имена файлов или папок, содержащие пробелы, нужно заключать в двойные кавычки. Например, «C:\Program Files\User Folder\Programm.exe».
Приведем примеры использования PsExec.
Например, чтобы запустить командную строку на удаленной машине, достаточно ввести:
psexec.exe \\xxx.xxx.xxx.xxx cmd.exe
в данном случае, вместо xxx.xxx.xxx.xxx — ip-адрес удаленной машины. Вместо него можно использовать и имя компьютера.
psexec.exe \\CompName cmd.exe
Если требуется ввести логин и пароль:
psexec.exe \\CompName -u user -p password cmd.exe
Приведем более сложный пример. Допустим, у нас есть два удаленных компьютера CompName1 и CompName2. Нам надо скопировать данные каталога primer с диска C CompName1 на диск C CompName2.
Для начала смонтируем диск C компьютера CompName2.
psexec.exe \\CompName1 -u user -p password net use X: \\CompName2\C
Теперь непосредственно копирование.
psexec.exe \\CompName1 -u user -p password xcopy C:\primer\*.* X:\primer\*.*
Возможности PsExec весьма обширны, и одной статьи недостаточно, чтобы остановиться на всех. Далее мы продолжим разбирать утилиты из пакета PsTools.
Продолжение следует…
При выполнении команды выдает ошибку:
C:\Windows\system32>psexec \\192.168.1.3 cmd.exe
Couldn’t access 192.168.1.3:
╬Єърчрэю т фюёЄєях.
Нет доступа к удаленному хосту.
При выполнении команды выдает ошибку:
C:\Windows\system32>psexec \\userpc -s -u domain\xxx -p xxx cmd.exe
Couldn’t access userpc:
╬Єърчрэю т фюёЄєях.
Но если предварительно запустить командную строку от имени domain\xxx, то команда выполняется успешно.
в чем может быть причина отказа доступа без предварительного запуска cmd от имени domain\xxx?
C:\Windows\system32>psexec \\userpc -u domain\xxx -p xxx -s cmd.exe
В таком виде работает?
Could not start PSEXESVC service on
╬Єърчрэю т фюёЄєях.
не работает. приходится также предварительно запускать cmd от имени пользователя
Бывает, что PsExec пытается запустить PSEXESVC от локальных учётных данных, даже если в команде прямо прописаны другие учётные данные. Попробуйте:
psexec -u domain\xxx -p xxx -s \\userpc cmd.exe или psexec -u domain\xxx -p xxx \\userpc -s cmd.exe
не помогает.