Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #101, МАЙ 2007 г.

Меняем окна на консоль

Денис Колисниченко

Хакер, номер #101, стр. 154

(dhsilabs@mail.ru, www.dkws.org.ua)

Администрирование Windows 2003 из командной строки

Парадоксально, но факт: утилиты командной строки в Windows никогда не привлекали внимания ни пользователей, ни администраторов, но в тоже время состав и возможности этих утилит обогащаются каждый год.

О том, как работать в командной строке

Наиболее часто используемой утилитой командной строки является сам командный интерпретатор - cmd.exe. Именно его мы запускаем, когда нам нужно поработать с командной строкой. Интерпретатор cmd пришел на смену command.com из мира DOS и Windows 9x.

Когда торопишься или просто не хочешь ждать завершения первой команды, можно ввести сразу несколько команд, разделив их амперсандом:

команда1 & команда2 & ... & командаN

Если эту последовательность команд приходится выполнять часто, целесообразно создать командный файл - обычный текстовый файл с расширением cmd. Каждая команда записывается в отдельной строке, но можно и использовать амперсанды.

Иногда нужно проанализировать результат первой команды, а только потом, если результат успешен, выполнить вторую команду. Это можно реализовать с помощью двойного амперсанда:

команда1 && команда2

Вторая команда будет выполнена, если код завершения первой команды равен нулю (норма? корд равен нулю?) (успешное завершение).

Не успел прочитать, что написала тебе программа? Тогда вывод можно передать программе more для постраничного просмотра (листать нужно пробелом):

команда | more

Символ «|» используется для перенаправления стандартного вывода одной команды на стандартный ввод другой. Что будет делать с этим выводом другая программа, зависит только от нее.

Для перенаправления вывода команды в файл используются символы «>» и «>>»:

команда > файл

команда >> файл

В первом случае файл, если он существует, будет перезаписан, а во втором информация будет добавлена в конец файла. Для подавления вывода команды можно перенаправить вывод в пустое устройство:

команда > NUL

Для очистки экрана командной строки удобно использовать команду cls.

Команды бывают внутренними и внешними. Внутренние команды выполняет сам cmd.exe. Внешние команды - обычные исполняемые exe-файлы на диске. Когда мы вводим команду, cmd определяет, что это за команда. Если внутренняя, то он выполняет ее сам, если внешняя, тогда cmd производит поиск исполняемого файла в текущем каталоге и по пути поиска программ (переменная окружения PATH). Просмотреть содержимое переменной PATH можно так:

echo %PATH%

Команды для управления операционной системой

В Unix есть очень полезная программа shutdown. С ее помощью можно не только завершить работу системы (или перезагрузить ее), но и указать время завершения. Аналог этой команды есть и в Windows. С ее помощью можно просто выключить систему, выполнить перезагрузку, убить активных пользователей, перейти в режим пониженного энергопотребления и закончить сеанс без отключения компьютера. Очень полезен параметр '-t', позволяющий задать в секундах тайм-аут операции.

К командам этой группы также относится программа taskkill, которая используется для завершения\убийства работы одного или нескольких процессов. Задать процесс можно по имени образа (имени исполняемого файла - ключ ‘/IM’) или по идентификатору процесса (ключ ‘/pid’). Например:

taskkill /IM notepad.exe

Вообще говоря, возможностей у этой команды очень много. К примеру, можно завершить все процессы, которые используют определенную DLL.

Команды мониторинга

Как было отмечено, команде taskkill нужно передать имя образа или PID процесса. Узнать PID процесса можно с помощью команды tasklist.

Также к командам мониторинга можно отнести: mem (вывод информации об использовании памяти), systeminfo (полная информация о системе) и tracerpt (отслеживание журнала событий с возможностью вывода отчета в формате CSV).

Сетевые команды

В Windows довольно много программ для диагностики и мониторинга сети, причем некоторые администраторы даже не подозревают об их существовании:

  • arp - управление ARP-таблицей;
  • ping - отправка ICMP-пакетов на указанный узел для проверки его доступности;
  • ping6 - версия ping для протокола IPv6;
  • tracert - трассировка маршрута к указанному узлу;
  • tracert6 - версия tracert для протокола IPv6;
  • pathping - усовершенствованная версия tracert;
  • net - управение сетью из командной строки;
  • nskookup - просмотр записей DNS-сервера;
  • netstat - вывод информации о сети;
  • ipconfig - вывод информации о настройках протокола IP;
  • route - вывод и изменение таблицы маршрутизации;
  • netsh (routemon) - управление маршрутизатором.

Особого внимания заслуживают команды net и netstat. С помощью первой можно произвести много различных операций. Введи команду net без параметров - в ответ получишь список команд:

  • accounts - используется для обновления базы данных регистрационных записей и изменения параметров входа в сеть;
  • computer - добавляет или удаляет компьютеры из базы данных домена NT;
  • config - выводит информацию о службах сервера или рабочей станции;
  • continue - активизирует службу, ранее приостановленную с помощью команды net pause;
  • file - используется для установки и снятия блокировки с совместно используемого файла, а также для вывода списка блокировок;
  • group - выводит информацию о глобальных группах сервера, также используется для изменения глобальных групп;
  • localgroup - управляет локальными группами на локальном компьютере;
  • name - управляет псевдонимами этого компьютера;
  • pause - приостанавливает выполнение заданной службы, продолжить работу службы можно с помощью команды net continue;
  • print - управляет очередью печати;
  • send - отправляет короткое сообщение пользователям (или конкретному пользователю) сети;
  • session - управляет сеансами связи этого компьютера с другими компьютерами;
  • share – разрешает/запрещает использовать ресурсы этого компьютера другим компьютерам сети;
  • start - запускает остановленную сетевую службу;
  • stop - останавливает службу;
  • statistics - выводит журнал статистики для локальной службы рабочей станции или сервера;
  • time - синхронизирует время этого компьютера с временем другого компьютера сети;
  • use - используется для подключения общих ресурсов другого компьютера сети;
  • user - создает и изменяет учетные записи пользователя, используется только на сервере;
  • view - выводит список общих ресурсов этого компьютера.

Получить справку по конкретной команде можно так:

net help имя_команды

Теперь поговорим о команде netstat. Она выводит статистику использования сети и отображает информацию о текущих соединениях. Представим, что на твоем компьютере закрыты все приложения, которые могут обращаться к сети, а обращение к ней все равно происходит, о чем свидетельствуют индикаторы в system tray. Введи команду «netstat –o» и узнаешь, какая программа это делает (параметр '-o' используется для вывода PID процесса).

Команды обслуживания жестких дисков

Для проверки дисков используются команды chkdsk (проверка FAT-разделов) и chkntfs (проверка NTFS-разделов), для дефрагментации - defrag. recover применяется для восстановления файлов с поврежденных разделов, а всем известная команда format - для форматирования дисков.

Вместо команды fdisk, которая была в Windows 9x, в современных версиях Windows используется diskpart. Эта программа позволяет разбить диск на разделы, создать/удалить логические диски, выбрать активный раздел и т.д. Если команда fdisk работала в интерактивном режиме, то diskpart в основном ориентирована на использование в сценариях. Сценарии - это текстовые файлы с инструкциями, которые должна выполнить diskpart. Вызвать diskpart можно так:

diskpart /s <имя_сценария>

Пример сценария diskpart

select disk 0

clean

create partition primary

select partition 1

assign letter=c:

active

format

exit

Обрати внимание, как здесь осуществляется работа с объектами. Сначала с помощью команды select мы выбираем диск (select disk). Затем мы производим две операции (clean и create partition). Далее выбираем другой объект - раздел (select partition) и производим операции с ним (делаем раздел активным и форматируем его).

Можно указать размер создаваемого раздела (в данном случае 5 Гб), например:

create partition primary size=5000

К этому разделу можно отнести еще две команды: diskperf, которая управляет счетчиками производительности жесткого диска, и fsutil, управляющую поведением файловой систем. Например, с помощью fsutil можно сбросить или установить флаг тома «грязный» (dirty), а также получить информацию о файловой системе.

Команды для поддержки и диагностики Active Directory

В Windows 2003 для управления службой каталога используются так называемые DS-утилиты:

  • dsquery - выводит список объектов Active Directory по заданным параметрам поиска;
  • dsget - возвращает атрибуты заданного объекта Active Directory, может принимать на стандартный ввод стандартный вывод команды dsquery;
  • dsadd - добавляет один или несколько объектов Active Directory;
  • dsmod - модифицирует атрибуты существующего объекта;
  • dsmove - перемещает объект из одного домена в другой;
  • dsrm - удаляет один или несколько объектов;

Синтаксис всех DS-команд похож, используй «/?» для получения справки.

Для диагностики контроллера домена (DC) используется утилита DcDiag из комплекта Support Tools. Если запустить ее без параметров, то запустится 27 тестов DC (к слову, в Windows 2000 было 22 теста).

Другие команды

Для выполнения заданной команды в строго определенное время можно использовать планировщик at. Есть возможность задать дату запуска команды, время, интервал (например, каждый день). Программа может работать в интерактивном режиме (параметр /interactive).

Если боишься редактировать файл boot.ini в блокноте, воспользуйся программой bootcfg, которая позволяет избежать ошибок при редактировании этого файла.

Иногда полезно опросить драйверы устройств. Для этого используется команда driverquery.

Windows PowerShell

Возможности стандартного командного интерпретатора cmd в Windows довольно скудны, особенно по сравнению с командными интерпретаторами Unix: ksh, bash, zsh. В Microsoft это тоже понимают, поэтому была разработана оболочка Monad, она же MSH, которая впоследствии была переименована в Windows PowerShell. Установить MSH можно на следующих платформах: Windows XP SP2, Windows Vista, Windows Server 2003 and Windows Server Longhorn. Скачать PowerShell можно по адресу www.microsoft.com/windowsserver2003/technologies/management/powershell/default.mspx. Там же ты найдешь и полное руководство по PowerShell.

Оболочка PowerShell - это интерактивный командный интерпретатор. С его помощью можно создавать сценарии, позволяющие администраторам автоматизировать управление системными задачами как на сервере, так и на других компьютерах сети. PowerShell, в отличие от cmd, предоставляющего доступ только к файловой системе, позволяет управлять всей операционной системой и ее приложениями. Например, мы можем работать с реестром Windows как с обычной файловой системой. Вот некоторые полезные команды, которые нужно знать для начала работы в PowerShell:

  • Get-Command - получить список доступных команд;
  • Get-Help - получить справку по указанной команде;
  • Get-Drive - получить список дисков;
  • Set-Location - изменить текущее местоположение (аналог команды cd в cmd);
  • Set-Alias - создать псевдоним для команды;
  • Get-Date - вывести дату.

Как и в cmd, поддерживается перенаправление ввода/вывода, например:

Get-Date > current-date.txt

При запуске PowerShell автоматически запускаются следующие сценарии (если они найдены):

  • Documents and Settings\All Users\Documents\Msh\profile.msh
  • Documents and Settings\All Users\Documents\Msh\Microsoft.Management.Automation.msh_profile.msh
  • $HOME\My Documents\msh\profile.msh
  • $HOME\My Documents\msh\Microsoft.Management.Automation.msh_profile.msh

Сценарий - это обычный текстовый файл, содержащий команды PowerShell. Расширение у файла сценария должно быть msh. Синтаксис PowerShell похож на синтаксис любого другого языка высокого уровня. Рассмотрим несколько примеров:

MSH> 5*5

25

MSH> "Конкатенация " + "строк"

Конкатенация строк

MSH> (Get-Date).year * 5

10035

Можно работать с переменными, причем поддерживаются массивы:

MSH> $t = 10

MSH> $t

10

MSH> $arr = 1,2

MSH> $arr

1

2

MSH> $arr[1] = 3

MSH> $arr

3

2

Перед именем переменной нужно обязательно указывать знак доллара - так PowerShell поймет, что перед ним переменная, а не значение.

Нумерация элементов массива начинается с единицы. Для доступа к элементу массива используются квадратные скобки, для добавления нового элемента в массив - оператор «+»:

MSH> $arr += 7

MSH> $arr

3

2

7

Кроме простых массивов, поддерживаются ассоциативные массивы:

MSH> $assoc = @{ one = 1; two = 2; three = 3}

MSH> $assoc['one']

1

Для добавления элемента в ассоциативный массив используется вот такая конструкция:

$assoc += @{ four = 4 }

Тип переменной выбирается автоматически, но можно установить любой тип .NET: array, bool, byte, char, char[], decimal, double, float, int, int[], long, long[], regex, single, scriptblock, string, type, xml. Он определяется в квадратных скобках в момент присваивания:

MSH> $var = [int]10;

В сценариях можно использовать условные операторы if-elseif-else, switch, а также операторы циклов while, do-while, do-until, foreach.

Мы рассмотрим только оператор if-elseif-else и циклы while и foreach. Конструкция if-elseif-else следующая:

if (условие) {операторы

} elseif (условие) {операторы

...

} elseif (условие) {операторы

} else {операторы}

Условие задается так:

переменная оператор_сравнения переменная_или_значение

Цикл while выглядит так:

while {условие} {операторы}

Пример:

$i = 0; while($i -lt 10) { $i; $i++ }

Этот цикл выведет числа от 0 до 9.

Теперь рассмотрим синтаксис foreach:

foreach (переменная in ассоциативный_массив) {операторы}

Цикл foreach удобно использовать для перебора значений ассоциативного массива, например:

foreach ($v in Get-Process |Sort-Object Name) { $v.Name }

А сейчас поговорим о работе с реестром. Перейти в нужный раздел можно с помощью всем знакомой команды cd:

MSH> cd hkcu:

Мы попали в раздел HKEY_CURRENT_USER. Можно перейти в другой раздел, например HKEY_LOCAL_MACHINE, задав его имя или сокращение (hklm). Вывести содержимое раздела можно с помощью команды dir. Чтобы просмотреть его, используется команда get-property:

MSH> cd hkcu:SoftwareMicrosoftNotepad

MSH> get-property .

В данном случае мы выводим настройки блокнота. Значение переменной в разделе устанавливается посредством set-property (следующая команда изменит шрифт блокнота):

MSH> set-property . -property lfFaceName -value "Arial"

WWW

Группы, на которые можно условно разделить все команды Win2003

  • команды для работы с файловой системой;
  • команды для управления операционной системой;
  • команды мониторинга;
  • сетевые команды;
  • команды для поддержки Active Directory;
  • команды для обслуживания жестких дисков;
  • другие команды.

Команды для работы с файловой системой

  • type - просмотр файла;
  • more - постраничный вывод файла;
  • copy - копирование одного или нескольких файлов;
  • move - перемещение одного или нескольких файлов (или переименование каталога);
  • del - удаление одного или нескольких файлов;
  • ren - переименование файла;
  • attrib - изменение атрибутов файла/каталога (скрытый, системный, только чтение, архивный);
  • fc - сравнение файлов;
  • find - поиск текстовой строки в одном или нескольких файлах;
  • grep - поиск текстовой строки (можно использовать регулярные выражения) в файле или в списке файлов;
  • cd - смена каталога;
  • dir - вывод содержимого каталога;
  • tree - вывод дерева каталогов;
  • md (или mkdir) - создание каталога;
  • rd - удаление каталога или дерева каталогов.
Содержание