Время на прочтение4 мин
Количество просмотров12K
Тестирование систем на проникновение требует от пентестера знания большого количества различного инструментария: от банальных текстовых редакторов до штатных систем обнаружения вторжений. Одним из важных этапов пентеста является запуск команд на стороне тестируемого хоста для выполнения собственных нужд. Так как способов это сделать существует довольно большое количество, статья расскажет о нескольких методах запуска команд в инфраструктуре, где работает операционная система Windows. Будут приведены несколько инструментов и методы их использования. Также будут рассмотрены несколько особенностей, которые должны быть учтены при использовании каждого способа запуска команд.
Как запустить команду в системе
Windows — одна из самых популярных платформ, которая используется по всему миру, причем для многих пользователей она является единственным понятным интерфейсом для работы с компьютером. Как известно, данная система имеет довольно сложную структуру, которую можно изобразить с помощью абстрактного представления основных элементов.
Картинка взята отсюда.
Из-за такой сложной структуры пользователям может быть нелегко обнаруживать оптимальный функционал, который предоставляет операционная система для выполнения текущих задач. Допустим, нам необходимо запустить команду для конфигурации или для сбора данных о системе. Какими интерфейсами можно воспользоваться?
По умолчанию в операционной системе Windows существует ряд уже готовых оболочек для выполнения команд. Все они выполнены в виде отдельных исполняемых файлов. Небольшой список приведен ниже:
-
cmd.exe
— интерпретатор командной строки -
powershell.exe
— инструмент для раширения возможностей командной строки. Используется для автоматизации задач администратора. Предоставляет доступ к платформе .Net и позволяет выполнять команды на одноименном языке программирования -
at.exe
— инструмент для запуска команд по расписанию. Становится доступен, если запущен сервис расписаний. -
wmic.exe
— утилита для сбора данных из инструментария управления и диагностики операционной системой -
psexec.exe
— утилита для запуска приложений и процессов на удаленной или локальной системе -
wscript.exe
— сервер для выполнения скриптовых сценариев в ОС (vbscript, js) -
cscript.exe
— запускает сценарий для командной строки
Все перечисленные выше файлы действительно находятся в любой Windows системе, начиная, как минимум, с Windows 7. Но psexec.exe к таким не относится. Это инструмент, который изначально можно было только найти среди Sysinternals tools. На сегодняшний день psexeс имеет большое количество вариаций, переписанных на различные языки программирования.
Помимо готовых команд и интерпретаторов в ОС Windows существуют также наборы функций, которые могут предоставляться различными подсистемами, например WinRM
, WMI
, Windows Service Control Manager API
.
Особенности запуска команд
Все команды, которые выполняются ОС Windows, могут быть разделены на несколько групп по различным признакам. Определим для нашего исследования следующие группы:
-
локальный запуск команд
-
удаленный запуск команд
-
запуск команд с теми же привилегиями
-
запуск команд с использованием чужих привилегий
Распределим все уже описанные методы запуска команд в ОС:
-
Запуск с теми же привилегиями локально и удаленно:
-
*script.exe
-
wmic.exe
-
cmd.exe
-
powershell.exe
-
-
Запуск с повышенными привилегиями локально и удаленно:
-
at.exe
-
psexec.exe
-
Практическая проверка
Все данные о командах были собраны по документации ОС Windows. Для теста будем использовать следующий стенд:
-
Vbox в качестве виртуальной среды
-
Windows Server 2019 Evaluation в качестве системы для развертывания сервисов AD
-
Kali Linux в качестве атакующей системы
-
набор скриптов Impaсket для доступа к подсистемам выполнения команд
-
IOXIDResolver.py — инструмент для получения NetBIOS имени системы и перечня сетевых интерфейсов
Все машины подключены в host-only сеть. На машине Windows Server отключены механизмы защиты (FireWall, Defender).
Для первичного доступа в систему будем использовать уязвимость Zerologon. Описание и инструменты для эксплуатации уязвимости можно найти в сети. Оставим это в качестве домашнего задания для читателя.
Шаг 1 — получение данных о сетевых интерфейсах и netBIOS имени сервера:
Шаг 2 и 3 — запуск эксплойта Zerologon, получение hash пользователя:
Шаг 4 — для выполнения команд в системе будем использовать Administrator и его хэш. Для остальных пользователей можно будет выполнять те же самые операции. Предлагаем читателю выполнить их самостоятельно.
Теперь можно использовать полученные хэш и логин пользователя для запуска команд в системе. Для запуска команды будем пользоваться скриптами Impacket. Эти скрипты специально созданы для того, чтобы иметь возможность запускать команды в целевой системе с помощью проприетарных для Windows протоколов.
Нас интересуют следующие скрипты:
-
psexec.py
-
smbexec.py
-
wmiexec.py
-
atexec.py
Для проверки привилегий каждый запущенный скрипт будет работать в интерактивном или полуинтерактивном режиме. Тестовая команда будет — whoami
. Она как раз будет показывать, чьи привилегии сейчас использует скрипт для запуска команд.
Запуск psexec.py — скрипт повторяет работу одноименного инструмента. Особенностью запуска является задействование механизма имперсонализации. Для того, чтобы метод сработал, у пользователя должен быть доступ к расшаренным директориям системы. Скрипт за счет этого сможет создать сервис, который будет запускать cmd.exe от имени пользователя System:
Запуск smbexec.py — по сути использует тот же метод, что и psexec.py, только при запуске каждой команды, стартует новый сервис на целевой системе.
Запуск wmiexec.py — работает от имени тоже пользователя, чьи учетные данные были использованы. Обрабатываются запросы асинхронно, может занять длительное время.
Запуск atexec.py сопряжен с конфигурацией целевой системы. Если зависимый сервис не запущен в целевой системе, то выполнение команд невозможно.
Таким образом, можно запускать команды в ОС Windows удаленно. Рассмотренные методы наиболее эффективно позволяют производить сбор данных и проведения тестирования на проникновение.
На этом всё. В преддверии старта курса «Пентест. Практика тестирования на проникновение», приглашаем всех желающих на бесплатный демоурок, в рамках которого познакомимся с инструментами для исследования AD. Полученные данные будем использовать для повышения привилегий и продвижения в сети.
-
Записаться на демоурок
Совершенствуйте свои сценарии Сценарии для командной строки — это файлы с простым текстом, которые интерпретируются командным процессором как наборы команд, подлежащие последовательному исполнению. История сценариев для командной строки началась на заре
Совершенствуйте свои сценарии
Сценарии для командной строки — это файлы с простым текстом, которые интерпретируются командным процессором как наборы команд, подлежащие последовательному исполнению. История сценариев для командной строки началась на заре 80-х — именно с этого времени и по сей день оболочка Command.com в MSDOS поддерживает исполнение сценариев посредством простых пакетных файлов. Выпущенный в 1993 году вместе с Windows NT другой командный процессор, Cmd.exe, также поддерживает язык макропрограммирования, подобный языку пакетных файлов Command.com. Несмотря на солидный возраст технологии, макропрограммирование в оболочке Cmd.exe все еще широко используется специалистами по ИT. Например, простой сценарий с командой For может превратить команду, которая сама по себе работает одновременно только с одним компьютером или пользователем в командной строке, в команду, которая пошагово проходит другой текстовый файл и исполняется для каждой строки в этом файле. Благодаря тому что сценарии для командной строки являются файлами с простым текстом, который представляет собой набор команд, их легко создавать и менять и они удобны для восприятия. Но простота макропрограммирования обманчива. Небрежно написанный сценарий для командного процессора может вызывать проблемы. Мне приходилось наблюдать, как сценарии для командного процессора при неправильных допущениях относительно вычислительной среды и операционной системы в лучшем случае работали некорректно, а в худшем — внезапно выполняли разрушительные действия на системах. Чтобы читатели могли избежать подобных проблем, я подготовил 10 советов для создания более надежных сценариев, которые могут работать во многих вычислительных средах.
1.
По возможности используйте переменные среды
Используя переменную в сценарии, мы заключаем имя переменной между знаками процента (%), а когда сценарий исполняется, знаки процента и текст между ними заменяется значением этой переменной. Применение переменных делает код сценария более универсальным, поэтому у него больше шансов успешно работать на разных компьютерах. Например, в сценарии для командного процессора не стоит жестко прописывать установочный каталог Windows. Вместо этого следует использовать переменную SystemRoot, которая всегда будет указывать на конкретный установочный каталог Windows. Так, команда
Echo %SystemRoot%
будет отображать содержимое SystemRoot (т. е. установочного каталога Windows). Я неоднократно видел сценарии, в которых для того, чтобы указать на установочный каталог Windows, использовали запись C:WINDOWS. Если Windows установлена не в C:WINDOWS (например, Windows 2000 и более ранние версии устанавливаются в WINNT), сценарий не будет работать корректно. Чтобы увидеть список переменных среды, следует ввести в командной строке команду Set. Некоторые переменные не появляются в списке, генерируемом командой Set, потому что они динамически генерируются Cmd.exe. В табл. 1 показан список этих переменных. Как и в случае с другими переменными среды, эти переменные заключаются в знаки процента. Например, следующая строка сценария будет отображать текущие время и дату:
Echo %DATE% %TIME%
2.
Не следует ожидать, что обычные пакетные файлы для Command.com будут так же хорошо работать в Cmd.exe
Те, кто привык писать пакетные файлы для платформ MS-DOS или Windows 9x/Me, должны иметь в виду, что в новейших версиях Windows некоторых команд не существует. Два самых распространенных примера — команды Choice и Deltree. Просмотрите свои старые пакетные файлы, чтобы убедиться, что они корректно работают в оболочке Cmd.exe. В табл. 2 приведено несколько возможных замен для Choice и Deltree. Большинство замен имеют синтаксис, отличный от синтаксиса команд, на место которых они предлагаются, поэтому придется соответствующим образом изменить сценарии.
3.
В оболочке Cmd.exe используйте расширение .cmd
Пакетным файлам Command.com необходимо расширение .bat. Оболочка Cmd.exe тоже может использовать расширение .bat, но в более мощном языке макропрограммирования Cmd.exe многие команды несовместимы с Command.com. Таким образом, .bat файл, написанный для Cmd.exe, может сбоить, если пользователь попытается исполнить его в Command.com (например, в Windows 98). Один из способов избежать этой проблемы состоит в использовании расширения .cmd для сценариев. Поскольку Command.com не распознает расширение .cmd, он просто не будет исполнять пакетный файл, если его имя оканчивается на .cmd.
4.
Убедитесь в том, что нужные исполняемые файлы доступны
Если ваш сценарий задействует программы, которые не являются частью стандартной установки операционной системы, необходимо позаботиться о том, чтобы все такие программы были доступны. Следует также задокументировать эти зависимости в сценариях. Я предлагаю для обеспечения доступности исполняемых файлов помещать их в один каталог со сценарием. Тогда для их запуска используется синтаксис
«% ~dp0exename» …
где exename — это имя исполняемого модуля, который требуется запустить. Синтаксис %~dp0 возвращает диск, путь и имя файла текущего сценария без кавычек. Заключение всей строки в кавычки гарантирует работоспособность сценария, даже если имя файла или каталога, в котором находится сценарий, содержат кавычки.
5.
Правильно используйте двойные кавычки
Похоже, двойные кавычки («) являются общим источником путаницы для тех, кто пишет сценарии. Двойные кавычки — это всего лишь способ идентифицировать содержащие пробелы аргументы командной строки. Например, правильная на первый взгляд командная строка
dir C:Program Files
на самом деле дает команде Dir два аргумента: C:Program и Files. Чтобы воплотить свое намерение передать команде один аргумент C:Program Files (включая пробел), мы должны заключить его в двойные кавычки:
dir «C:Program Files»
Символы кавычек не являются частью имени папки. Они сообщают команде Dir, что текст между ними является одним аргументом.
Сценарии для командного процессора также поддерживают параметры командной строки. Чтобы воспользоваться параметрами командной строки сценария, нужно задействовать запись %n (где n — число от 0 до 9). Эта запись называется заменяющим параметром (или просто параметром). Например, сценарий будет заменять параметр %1 первым аргументом командной строки, %2 — вторым аргументом и т. д. Помимо параметров от %1 до %9, %0 заменяется именем сценария, %* заменяется целой командной строкой сценария (исключая имя сценария). Я упоминаю здесь параметры командной строки потому, что, когда Cmd.exe заменяет параметры от %1 до %9 соответствующими аргументами командной строки, он оставляет двойные кавычки, если они есть в аргументе. Напрашивается очевидный вывод: параметр сценария всегда будет заключен в кавычки, если он содержит пробелы. На этом наблюдении основано несколько простых правил, аккуратно следуя которым можно практически полностью устранить проблемы кавычек.
- Не используйте кавычки внутри параметров сценария (от %1 до %9), поскольку они уже могут содержать кавычки. Если необходимо задействовать параметр с командой If, используйте символы, отличные от кавычек (например, фигурные скобки), чтобы избежать синтаксической ошибки. Следующая строка будет работать правильно, даже если первый параметр (%1) содержит кавычки:
If {%1}=={} Goto :HELP
Исключение из этого правила составляет случай, когда мы используем синтаксис %~n, чтобы удалить кавычки параметра (см. следующее правило).
- Не помещайте кавычки внутрь переменной среды. Наличие пробелов в переменных среды допускается, и кавычки при этом не нужны. Если нужно скопировать параметр в переменную, используйте синтаксис %~n (где n — число от 1 до 9), который возвращает параметр без кавычек. Например, строка
Set DATAFILE=% ~1
будет копировать первый параметр сценария (без кавычек) в переменную DATAFILE. Исключение составляет случай, когда вы создаете текст в кавычках, который будет передан в другую команду. - Не забывайте, когда это необходимо, помещать переменные среды в кавычки. Например, рассмотрите следующие строки сценария:
Set TARGET=% ~2
Copy %1 «%TARGET%»
Первая из этих строк копирует второй аргумент сценария в переменную TARGET, удаляя кавычки. Вторая строка синтаксически верна, потому что параметр %1 уже заключен в кавычки, если он содержит пробелы, а переменная TARGET должна иметь кавычки, потому что она может содержать пробелы.
6.
Применяйте команды Setlocal и Endlocal
Команда Setlocal копирует все переменные среды, а команда Endlocal восстанавливает все переменные со значениями, которые они имели перед запуском сценария. Endlocal также удаляет любые переменные, созданные сценарием. Использование обеих команд делает сценарий более самостоятельным и гарантирует, что сценарий «убирает за собой мусор» путем восстановления переменных среды в их оригинальные значения и удаления переменных, созданных сценарием.
Также можно использовать команду Setlocal Enableextensions, чтобы точно знать, что расширения команд включены. Расширения команд — это усовершенствования для группы внутренних команд Cmd.exe (например, If, For, Call), которые предоставляют дополнительные возможности по сравнению с командами Command.com, имеющими такие же имена. Расширения команд включены по умолчанию, но в тех редких случаях, когда они отключены, команда Setlocal Enableextensions гарантирует включение расширений команд. Чтобы получить более подробную информацию о расширениях команд, следует ввести в командной строке Cmd /?.
7.
Используйте при необходимости символ Escape
Cmd.exe использует символ каретки (^) как признак отмены специального значения зарезервированных символов командной оболочки. Например, амперсанд (&) является разделителем команд — он позволяет поместить несколько команд в одной строке. Если вы намерены использовать амперсанд в обычном, литературном смысле, то должны «аннулировать» его специальное значение, поместив перед ним символ каретки ^. Так, в строке
Echo The ^& character is
the command separator
символ ^ вынуждает командный процессор отменить обычную интерпретацию следующего за ним символа. Специальными символами являются символы ( ) < > ^ & |. Нет необходимости использовать признак отмены, если эти символы встречаются внутри строки, заключенной в кавычки.
8.
Не используйте команду Exit без ключа /b
Без ключа /b команда Exit закрывает текущую командную оболочку. Если кто-то запускает Cmd.exe и исполняет сценарий, который содержит команду Exit, текущая сессия командного процессора резко закроется. Команда Exit /b закрывает текущий сценарий, не закрывая текущую сессию командного процессора. Чтобы больше узнать о команде Exit, наберите в командной строке Exit /?.
9.
Используйте команду If Errorlevel с осторожностью
Команда If Errorlevel проверяет код завершения последней команды, исполнение которой окончено. Поведение сценария зависит от результата проверки кода завершения программы. Рассмотрите, например, следующий сценарий:
Myprogram
If Errorlevel 1 Goto :ERROR
Команда Goto в этих строках будет выполнена, только если Myprogram.exe возвращает код завершения больше или равный 1. Другими словами, «If Errorlevel n» не означает «если последний код завершения программы в точности равен n»; на самом деле это условие означает «если последний код завершения программы не меньше n». Учитывая такое поведение, следует проверять код завершения программы в порядке убывания (от самого большого к самому маленькому). Чтобы проверить конкретное значение кода завершения программы, используйте динамическую переменную ERRORLEVEL вместо команды If Errorlevel. Нужно иметь в виду, что команда If Errorlevel отличается от переменной ERRORLEVEL, стоящей в списке в табл. 1. Команда If Errorlevel обратно совместима с командой If Errorlevel из Command.com; переменная ERRORLEVEL доступна только в Cmd.exe.
10.
Учитывайте особенности команды Start
Команда Start запускает программу или команду в окне новой консоли. Однако, если попытаться запустить программу из папки, которая содержит пробелы (или если имя программы содержит пробелы), поведение команды Start может не соответствовать вашим ожиданиям. Например, следующая команда:
Start «C:Program FilesMicrosoft
OfficeOffice11Winword.exe»
не запускает Microsoft Word вопреки ожиданию. Вместо этого команда Start откроет новую сессию Cmd.exe, заголовком окна консоли которой будет заключенная в кавычки строка. Такое поведение объясняется тем, что команда Start использует первую строку в кавычках в ее командной строке как заголовок окна консоли.
Чтобы обойти эту странность, используйте пару кавычек для указания пустого заголовка, затем вводите строку программы, которую хотите запустить. Корректная программа Start выглядит примерно так:
Start «» «C:Program FilesMicrosoft
OfficeOffice11Winword.exe»
Всего не предусмотришь
Сценарии командного процессора Cmd.exe применяются весьма широко. Освоив приведенные в этой статье рекомендации, вы сможете создавать более надежные сценарии и избегать распространенных проблем.
Дополнительные материалы по написанию сценариев в online-доступе на сайте Windows IT Pro/RE
OneNote — полнофункциональная система хранения сценариев
http://www.osp.ru/text/302/3546232.html
Рекурсивная загрузка Web-узла целиком
http://www.osp.ru/text/302/3207223/
Программный доступ к информации о дисковых квотах
http://www.osp.ru/text/302/3177796.html
Организация печати данных из сценариев
http://www.osp.ru/text/302/3177769.html
Как написать сценарий, выдающий заметные предупреждения
http://www.osp.ru/text/302/3137821.html
Получение списка членов вложенных групп
http://www.osp.ru/text/302/3137821.html
Самодельный инструмент для инвентаризации аппаратных средств
http://www.osp.ru/text/302/2876185.html
Перенос и активация учетных записей пользователей
http://www.osp.ru/text/302/2863575.html
Получение функциональности с использованием управляющих компонентов
http://www.osp.ru/text/302/2863520.html
Извлечение информации из Web-страницы
http://www.osp.ru/text/302/2740759.html
Системные утилиты одной строкой
http://www.osp.ru/text/302/2740725.html
Таблица 1. Таблица 2.
В данной статье будут рассмотрены основы командной строки Windows, а именно:
- Понятие командной строки;
- Справочник по командам командной оболочки;
- Последовательность событий при выполнение команды;
- Создание сценариев командной строки;
- Управление отображением текста и команд;
- Команды для изучение системной информации;
- Команды для использования реестра;
- Управление системными службами;
- Перезагрузка и выключение систем из командной строки;
- Управление приложениями и процессами из командной строки.
Содержание
- Понятие командной строки
- Краткий справочник по командам командной оболочки (Cmd.exe)
- Последовательность событий при выполнение команды
- Создание сценариев командной строки
- Управление отображением текста и команд
- Изучение системной информации
- Команды для использования реестра
- Управление системными службами
- Перезагрузка и выключение систем из командной строки
- Управление приложениями, процессами и производительностью
Понятие командной строки
Поддержка командной строки встроена в операционную систему Microsoft Windows и доступна через окно командной оболочки. Командная строка поддерживается во всех версиях Windows и служит для запуска встроенных команд, утилит и сценариев. Несмотря на мощь и гибкость командной строки, некоторые администраторы Windows никогда ее не используют. Если вам хватает графических средств администрирования, можно применять только их, щелкая мышью элементы пользовательского интерфейса.
Однако опытные администраторы Windows, квалифицированные специалисты по технической поддержке и «продвинутые» пользователи не могут обойтись без командной строки. Зная, как правильно применять командную строку, в частности, какие средства командной строки выбрать, как и когда их использовать, чтобы они работали эффективно, можно избежать многочисленных проблем и добиться четкого выполнения операций. Если вы занимаетесь поддержкой нескольких доменов или сетей, то для автоматизации ежедневных операций не только важно, но и необходимо иметь представление об экономящих время способах работы с командной строкой.
С каждой новой версией Windows командная строка совершенствовалась, а ее возможности расширялись. Командная строка претерпела значительные изменения, связанные не только с повышением производительности, но и с увеличением гибкости. Теперь с помощью командной строки Windows можно решать задачи, которые нельзя было решить в предыдущих версиях Windows.
Среду командной оболочки Windows запускают разными способами, в частности указывая параметры при запуске Cmd.exe или используя собственный стартовый файл, хранящийся в каталоге %SystemRoot%\System32.
Кроме того, командная строка может работать в пакетном режиме для выполнения набора команд. В пакетном режиме командная строка считывает и выполняет команды одну за другой.
Работая с командной строкой Windows, Вы должны понимать, откуда берутся используемые Вами команды. «Родные» команды (встроенные в операционную систему) бывают двух видов:
- Внутренние – существуют внутри командной оболочки, у них нет отдельных исполняемых файлов;
- Внешние — реализованы в отдельных исполняемых файлах, которые обычно хранятся в каталоге %SystemRoot% \System32.
Краткий справочник по командам командной оболочки (Cmd.exe)
- assoc — выводит или изменяет сопоставления (associations) типов файлов;
- break — задает точки останова при отладке
- call — вызывает из сценария процедуру или другой сценарий;
- cd (chdir) — показывает имя текущего каталога или выполняет смену текущего каталога;
- cls — очищает окно командной строки и буфер экрана;
- color — задает цвета текста и фона окна командной оболочки;
- сору — копирует файлы или выполняет конкатенацию файлов;
- date — показывает или устанавливает текущую дату;
- del (erase) — удаляет заданный файл, группу файлов или каталог;
- dir — показывает список подкаталогов и файлов в текущем или заданном каталоге;
- echo — выводит текст в окно командной строки или задает, надо ли отображать команды на экране (on|off);
- endlocal — отмечает конец локализации (локальной области видимости) переменных;
- exit — выход из оболочки командной строки;
- for — выполняет заданную команду для каждого файла в наборе;
- ftype выводит или изменяет текущие типы файлов в сопоставлениях расширений файлов с программами;
- goto — указывает, что интерпретатор команд должен перейти на строку с заданной меткой в пакетном сценарии;
- if — выполняет команды по условию;
- md (mkdir) — создает подкаталог в текущем или заданном каталоге;
- move — перемещает файл или группу файлов из текущего или заданного исходного каталога в указанный каталог. Также может переименовывать каталог;
- path — показывает или задает путь к командам, используемый операционной системой при поиске исполняемых файлов и сценариев;
- pause — останавливает выполнение пакетного файла и ожидает ввода с клавиатуры;
- popd — делает текущим каталог, имя которого было сохранено командой PUSHD;
- prompt — указывает, какой текст должен показываться в строке приглашения;
- pushd — сохраняет имя текущего каталога и при необходимости делает текущим заданный каталог;
- rd (rmdir) — удаляет каталог или каталог вместе с его подкаталогами;
- rem — помечает комментарии в пакетном сценарии или Config.nt;
- ren (rename) — Переименовывает файл или группу файлов;
- set — показывает текущие переменные окружения или задает временные переменные для текущей командной оболочки;
- setlocal — отмечает начало локализации (локальной области видимости) переменных в пакетных сценариях;
- shift — сдвигает позицию замещаемых параметров в пакетных сценариях;
- start — запускает заданную программу или команду в отдельном окне;
- time — показывает или устанавливает системное время;
- title — задает заголовок окна командной оболочки;
- type — показывает содержимое текстового файла;
- verify — включает режим проверки файлов после записи на диск;
- vol — показывает метку и серийный номер дискового тома.
Синтаксис любой внутренней команды (и большинства внешних) можно получить, введя в командной строке имя команды и /?, например:
copy /?
Командная оболочка — весьма мощная среда работы с командами и сценариями. В командной строке можно запускать команды разных типов: встроенные команды, утилиты Windows и версии приложений, рассчитанные на командную строку. Независимо от типа каждая команда, которую вы будете использовать, должна соответствовать одним и тем же синтаксическим правилам. Согласно этим правилам, за именем команды идут обязательные или необязательные аргументы. Кроме того, аргументы могут использовать перенаправление ввода, вывода или стандартных ошибок.
Последовательность событий при выполнение команды
- Командная оболочка заменяет любые переменные, введенные в тексте команд, их текущими — значениями;
- Если введена группа или цепочка из нескольких команд, строка разбивается на отдельные команды, которые в свою очередь разбиваются на имя и аргументы команды. Далее команды обрабатываются по отдельности;
- Если в имени команды указан путь, командная оболочка ищет команду по этому пути. Если в указанном каталоге такой команды нет, командная оболочка возвращает ошибку;
- Если в имени команды не задан путь, командная оболочка сначала пытается разрешить имя команды на внутреннем уровне. Если найдена внутренняя команда с таким именем, значит, вызвана внутренняя команда, которую сразу же можно выполнить. Если внутренней команды с таким именем нет, командная оболочка сначала ищет исполняемый файл команды в текущем каталоге, а затем в каталогах, перечне в переменной окружения PATH. Если файла команды нет ни в одном из этих каталогов, командная оболочка возвращает ошибку;
- Если команда найдена, она выполняется с заданными аргументами и при необходимости ввод считывается из источника, указанного в этих аргументах. Вывод и ошибки команд показываются в окне командной строки или направляются заданному приемнику вывода и ошибок.
- Как видите, на выполнение команд влияют многие факторы, в том числе пути к командам, перенаправление ввода-вывода, группирование или создание цепочек команд.
При работе с командной оболочкой Вы, вероятно, запускали ее, открывая меню Start (Пуск) и выбирая Programs (Программы) или All Programs (Все программы), затем Accessories (Стандартные) и Command Prompt (Командная строка). Другие способы запуска командной строки — диалоговое окно Run (Запуск программы) или ввод cmd в другом, уже открытом окне командной оболочки. Эти способы позволяют при запуске командной строки указывать аргументы: ключи, управляющие работой командной строки, и параметры, инициирующие выполнение дополнительных команд. Например, можно запустить командную оболочку в «молчаливом» режиме (т. е. отключить эхо-вывод) командой cmd /q или сделать так, чтобы командная оболочка выполнила заданную команду и завершила свою работу, — для этого нужно ввести cmd /с, а затем текст команды в кавычках.
В следующем примере командная оболочка запускается, выполняет команду ipconfig с выводом результатов в файл и завершается:
cmd /c "ipconfig > c:\ipconfig.txt"
Создание сценариев командной строки
Сценарии командной строки — текстовые файлы с командами, которые вы хотите выполнить. Это те же команды, которые обычно вводятся в командной оболочке Windows. Однако вместо того чтобы вводить команды каждый раз, когда они понадобятся, можно создать соответствующий сценарий и упростить себе жизнь.
Поскольку сценарии состоят из стандартных текстовых символов, их можно создавать и редактировать в любом стандартном текстовом редакторе, скажем, в Notepad (блокнот). Вводя команды, убедитесь, что каждая команда или группа команд, которые должны выполняться совместно, разметаются с новой строки. Это обеспечит их корректное выполнение. Закончив создание сценария командной строки, сохраните файл сценария с расширением .bat или .cmd. Оба расширения работают одинаково. Например, если вам надо создать сценарий для вывода имени системы, версии Windows и конфигурации IP, включите в файл SysInfo.bat или SysInfo.cmd следующие три команды:
hostname ver ipconfig -all
Управление отображением текста и команд
Команда ECHO служит двум целям: для записи текста в вывод (например, в окно командной оболочки или текстовый файл) и для включения/выключения эхо-отображения команд. Обычно при выполнении команд сценария сами команды и вывод этих команд отображаются в консольном окне. Это называется эхо-отображением команд (comand echoing).
Чтобы использовать команду ECHO для отображения текста, введите echo и текст, который надо вывести:
echo The system host name Is: hostname
Чтобы с помощью ECHO управлять эхо-отображением команд, введите echo off или echo on, например:
echo off echo The system host name is: hostname
Чтобы направить вывод в файл, а не в окно командной оболочки, используйте перенаправление вывода, например:
echo off echo The system host name is: > current.txt hostname » current.txt
Теперь посмотрим, как подавляется эхо-отображение команд. Запустите командную оболочку, введите echo off, затем другие команды. Вы увидите, что приглашение командной строки больше не выводится. Вместо него появляется только то, что набирается в консольном окне, и вывод выполненных команд. В сценариях команда ECHO OFF отключает эхо-отображение команд и приглашение командной строки. Добавляя в свои сценарии команду ECHO OFF, вы предотвращаете загромождение окна командной оболочки или файла текстом команд, если Вас интересует лишь вывод от этих команд.
Изучение системной информации
Часто при работе с компьютером пользователя или удаленным сервером возникает необходимость в получении базовой информации о системе вроде имени зарегистрированного в ней пользователя, текущего системного времени или местоположения определенного файла. Команды, которые позволяют собрать основную информацию о системе, включают:
- NOW — отображает текущую системную дату и время в 24-часовом формате, например Sal May 9 12:30:45 2003. Доступна только в Windows Server 2003 Resource Kit;
- WHOAMI — сообщает имя пользователя, зарегистрированного в системе на данный момент, например adatum\admi-nistrator;
- WHERE — выполняет поиск файлов по шаблону поиска (search pattern) и возвращает список совпавших результатов.
Чтобы использовать NOW или WHOAMI, просто введите команду в окне командной оболочки и нажмите Enter. Наиболее распространенный синтаксис для WHERE выглядит так:
where /r базовый_каталог_имя_файла
Здесь параметр /r указан для рекурсивного поиска, начиная от указанного каталога (базовый_каталог) и включая все его подкаталоги, а имя_файла — полное или частичное имя искомого файла, которое может включать символы подстановки (wildcards): знак ? заменяет один символ, а знак * — группу символов, например data???.txt или data*.*. В следующем примере в каталоге С:\ и всех его подкаталогах выполняется поиск всех текстовых файлов, имена которых начинаются с data.
where /r C:\ data*.txt
Также можно найти файлы всех типов, имена которых начинаются с data:
where /r C:\ data*.*
Иногда нужно получить информацию о конфигурации системы или о системном окружении. В критически важных системах эту информацию можно сохранить или распечатать для справки. Ниже перечислены команды, позволяющие собирать информацию о системе.
- DRIVERQUERY — выводит список всех установленных драйверов устройств и их свойства, в том числе имя модуля (module name), отображаемое имя (display name), тип драйвера и дату сборки (driver link date). В режиме отображения всей информации (/V) сообщается статус (status) и состояние (state) драйвера, режим запуска, сведения об использовании памяти и путь в файловой системе. Параметр /V также включает вывод детальной информации обо всех неподписанных драйверах.
- SYSTEMINFO — выдает подробную информацию о конфигурации системы, в том числе сведения о версии, типе и изготовителе операционной системы, процессоре, версии BIOS, объеме памяти, региональных стандартах, часовом поясе и конфигурации сетевого адаптера.
- NLSINFO — отображает подробную информацию о региональных стандартах, включая язык по умолчанию (default language), кодовую страницу Windows, форматы отображения времени и чисел, часовой пояс и установленные кодовые страницы. Эта команда доступна лишь в Windows Server 2003 Resource Kit.
Чтобы использовать эти команды на локальном компьютере, просто введите имя нужной команды в окне командной оболочки и нажмите Enter.
Команды для использования реестра
Реестр Windows хранит конфигурационную информацию операционной системы, приложений, пользователей и оборудования. Эти данные содержатся в разделах (keys) и параметрах (values) реестра, которые размещаются в определенном корневом разделе (root key), который контролирует, как и когда используются разделы и параметры.
Если Вы знаете пути к разделам и понимаете допустимые типы данных в разделах, то можете использовать команду REG для просмотра разделов и параметров и манипуляций над ними самыми разнообразными способами. REG поддерживает несколько подкоманд:
- REG add — добавляет в реестр новый подраздел или элемент;
- REG delete — удаляет из реестра подраздел или элемент;
- REG query — выводит список элементов раздела и имена подразделов (если они есть);
- REG compare — сравнивает подразделы или элементы реестра;
- REG сору — копирует элемент реестра по указанному пути раздела на локальной или удаленной системе;
- REG restore — записывает в реестр ранее сохраненные подразделы, элементы и параметры;
- REG save — сохраняет копию указанных подразделов, элементов и параметров реестра в файл.
Управление системными службами
Службы обеспечивают ключевые функции рабочих станций и серверов. Для управления системными службами на локальных и удаленных системах используется команда контроллера служб (service controller command) SC, имеющая набор подкоманд, ниже описывается лишь их часть:
- SC config — настройка учетных записей регистрации и запуска служб;
- SC query — вывод списка всех служб, настроенных на компьютере;
- SC qc — отображение конфигурации определенной службы;
- SC start — запуск служб;
- SC stop — остановка служб;
- SC pause — приостановка работы служб;
- SC continue — возобновление работы служб;
- SC failure — задание действий, выполняемых при сбое службы;
- SC qfailure — просмотр действий, выполняемых при сбое службы.
Во всех командах можно указывать имя удаленного компьютера, со службами которого Вы хотите работать. Для этого вставьте UNC-имя или IP-адрес компьютера перед используемой подкомандой. Вот синтаксис:
sc ИмяСервера Подкоманда
Перезагрузка и выключение систем из командной строки
Системы нередко приходится перезагружать или выключать. Один из способов — использовать для этого утилиту Shutdown, которая позволяет работать с локальной и удаленными системами. Другой способ управлять выключением или перезагрузкой системы — назначить задание для выключения. Здесь можно использовать Schtasks, чтобы указать время выключения, или создать сценарий со списком команд выключения для индивидуальных систем.
Управлять перезагрузкой и выключением локальной системы позволяют следующие команды.
Выключение локальной системы:
shutdown /s /t ЗадержкаВыключения /1 /f
Перезагрузка локальной системы:
shutdown /r /t ЗадержкаВыключения /1 /f
Управление приложениями, процессами и производительностью
Всякий раз, когда операционная система или пользователь запускает службу, приложение или команду, Microsoft Windows запускает один или более процессов для управления соответствующей программой. Несколько утилит командной строки упростят вам мониторинг программ и управление ими. К этим утилитам относятся:
- Pmon (Process Resource Manager) — показывает статистические данные по производительности, включая использование памяти и процессора, а также список всех процессов, выполняемых в локальной системе. Позволяет получать детальные «снимки» задействованных ресурсов и выполняемых процессов. Pmon поставляется с Windows Resource Kit;
- Tasklist (Task List) — перечисляет все выполняемые процессы по имени и идентификатору процесса, сообщает информацию о сеансе пользователя и занимаемой памяти;
- Taskkill (Task Kill) — останавливает выполнение процесса, заданного по имени или идентификатору. С помощью фильтров можно останавливать процессы в зависимости от их состояния, номера сеанса, процессорного времени, занимаемой памяти, имени пользователя и других параметров.
Вот в принципе все, что я хотел рассказать об основах командной строки Windows.
Запуск сценария из командной строки в консольном режиме
Можно
выполнить сценарий из командной строки
с помощью консольной версии WSH cscript.exe.
Например, чтобы запустить сценарий,
записанный в файле C:\Script\First.js, нужно
загрузить командное окно и выполнить
в нем команду
cscript
C:\Script\First.js
В
результате выполнения этого сценария
в командное окно выведется строка
«Привет!»(рис. 4.1)
увеличить
изображение
Рис.
4.1.
Результат выполнения First.js в консольном
режиме (cscript.exe)
Запуск сценария из командной строки в графическом режиме
Сценарий
можно выполнить из командной строки с
помощью (оконной) графической версии
WSH wscript.exe. Для нашего примера в этом
случае нужно выполнить команду
wscript
C:\Script\First.js
Тогда
в результате выполнения сценария на
экране появится нужное нам диалоговое
окно (рис. 4.2).
увеличить
изображение
Рис.
4.2.
Результат выполнения First.js в графическом
режиме (wscript.exe)
Таким
образом, мы видим, что при запуске
сценария в консольном режиме, вывод
текстовой информации происходит в
стандартный выходной поток (на экран),
при запуске в графическом режиме — в
диалоговое окно.
Запуск сценария с помощью меню Пуск
Для
запуска сценария с помощью пункта
Выполнить (Run) меню Пуск (Start), достаточно
написать полное имя этого сценария в
поле Открыть (Open) и нажать кнопку Ok. В
этом случае по умолчанию сценарий будет
выполнен с помощью wscript.exe, т. е. вывод
информации будет вестись в графическое
диалоговое окно.
Запуск сценария с помощью Проводника Windows (Windows Explorer)
Самым
простым является запуск сценария в
окнах Проводника Windows или на рабочем
столе — достаточно просто выполнить
двойной щелчок мышью на имени файла со
сценарием или на его значке (аналогично
любому другому исполняемому файлу). При
этом, как и в случае запуска с помощью
меню Пуск (Start), сценарий по умолчанию
выполняется с помощью wscript.exe.
Установка и изменение свойств сценариев
В
случае необходимости для сценариев
можно задавать различные параметры,
влияющие на ход их выполнения. Для
консольной (cscript.exe) и графической
(wscript.exe) версий сервера сценариев эти
параметры задаются по-разному.
Если
сценарий запускается в консольном
режиме, то его исполнение контролируется
с помощью параметров командной строки
для cscript.exe (см. табл. 4.1),
которые включают или отключают различные
опции WSH (все эти параметры начинаются
с символов «//»).
Таблица
4.1. Параметры командной строки для
cscript.exe
Параметр Описание
//I
Выключает
пакетный режим (по умолчанию). При этом
на экран будут выводиться все сообщения
об ошибках в сценарии
//B
Включает
пакетный режим. При этом на экран не
будут выводиться никакие сообщения
//T:nn
Задает
тайм-аут в секундах, т. е. сценарий будет
выполняться nn секунд, после чего процесс
прервется. По умолчанию время выполнения
не ограничено
//Logo
Выводит
(по умолчанию) перед выполнением сценария
информацию о версии и разработчике WSH
//Nologo
Подавляет
вывод информации о версии и разработчике
WSH
//H:CScipt
или
//H:Wscript
Делает
cscript.exe или wscript.exe приложением для запуска
сценариев по умолчанию. Если эти параметры
не указаны, то по умолчанию подразумевается
wscript.exe
//S
Сохраняет
установки командной строки для текущего
пользователя
//?
Выводит
встроенную подсказку для параметров
командной строки
//E:engine
Выполняет
сценарий с помощью модуля, заданного
параметром engine
//D
Включает
отладчик
//X
Выполняет
программу в отладчике
//Job:<JobID>
Запускает
задание с индексом JobID
из многозадачного WS-файла (структура
WS-файлов будет описана ниже)
//U
Позволяет
использовать при перенаправлении
ввода-вывода с консоли кодировку Unicode
Например,
команда
cscript
//Nologo C:\Script\First.js
запустит
сценарий First.js без информации о версии
WSH.
Сценарий
можно запускать с параметрами командной
строки, которые указываются после имени
этого сценария (процедура обработки
таких параметров будет описана ниже,
при рассмотрении объектов WshArguments,WshNamedиWshUnnamed).
Например, команда
cscript
//B C:\Script\First.js /a /b
запустит
сценарий First.js в пакетном режиме, при
этом /aи/bбудут являться параметрами этого
сценария, а//B— параметром приложения cscript.exe.
Если
сценарий запускается в графическом
режиме (с помощью wscript.exe), то свойства
сценария можно устанавливать с помощью
вкладки Сценарий (Script) диалогового окна,
задающего свойства файла в Windows (рис.
4.3).
Рис.
4.3.
Установка свойств сценария First.js
После
задания свойств сценария автоматически
создается файл с именем этого сценария
и расширением wsh, который имеет структуру
наподобие ini-файла, например:
[ScriptFile]
Path=C:\Script\First.js
[Options]
Timeout=0
DisplayLogo=1
Если
дважды щелкнуть в Проводнике Windows по
wsh-файлу или запустить такой файл из
командной строки, то соответствующий
сервер сценариев (wscript.exe или cscript.exe)
запустит сценарий, которому соответствует
wsh-файл, с заданными в секции Options
параметрами.
При
запуске сценариев с помощью wscript.exe для
задания параметров командной строки
сценария можно использовать технологию
drag-and-drop — если выделить в Проводнике
Windows несколько файлов и перетащить их
на ярлык сценария, то этот сценарий
запустится, а имена выделенных файлов
передадутся ему в качестве параметров.
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
- #
- #
- #
- #
- #
- #
- #
- #
- #
22.05.201540.15 Mб75Лекарственные_средства_Машковский_ 2012.djvu
- #
- #