Управляем основными функциями Win2k8 из командной строки
Сергей «grinder» Яремчук (grinаder@ua.fm, )
Операционные системы семейства Windows, в том числе и серверных версий, всегда ассоциировались с графическим интерфейсом, который считается более понятным при настройках, не говоря уже о простоте освоения новичками. Возможностям командной строки в различных руководствах редко уделяется внимание, и часто бывает так, что через некоторое время админ с удивлением обнаруживает, что многие операции удобнее производить именно из консоли.
Содержание:
- Диспетчер сервера в консоли
- Полезные параметры Netsh
- Настройка WFAS при помощи Netsh
- Служба удаленного управления WinRM
- Полезные мелочи
- Боковые выносы
Диспетчер сервера (Server Manager), появившийся в Win2k8, заменил десяток утилит из группы Computer Management в Win2k3. Это очень удобный инструмент, в котором все настройки собраны в одном месте. Но кроме графического Server Manager, в состав сервера входит и командная утилита ServerManagerCmd.exe, при помощи которой также можно управлять рядом настроек. Например, чтобы с ее помощью просмотреть список всех ролей и компонентов, имеющихся на сервере, используем параметр ‘-query/-q‘.
> servermanagercmd -query [x] Веб-сервер <IIS> [Web-Server]
В ответ получим довольно большой список. Установленные роли и компоненты будут отмечены крестиком и визуально выделены зеленым цветом. Результат выполнения команды можно сохранить в файл формата XML, указав последним аргументом его имя:
> servermanagercmd -query c:\Query.xml
Внутри образованного файла будет несколько десятков строк вроде этой:
<Role DisplayName=»DHCP-сервер» Installed=»false» Id=»DHCP» />
Последним в описании роли или компонента в квадратных скобках идет идентификатор команды [command-Id]. Чтобы установить или удалить роль/компонент, достаточно узнать его идентификатор и затем использовать в качестве значения параметра. Например, установим роль файлового сервера. Находим его идентификатор и вводим:
> servermanagercmd –install FS-FileServer
Но нужно быть внимательным при выборе Id. Возьмем такие, казалось бы, похожие строки:
- Веб-сервер IIS (Web-Server)
- Веб-сервер (Web-WebServer)
При установке Web-Server будут автоматически добавлены все роли, относящиеся к IIS, т.е. ASP, ASP.NET, CGI, Web Security и другие. Дополнительные компоненты для Web-WebServer необходимо указать самостоятельно.
Чтобы уберечь админа от лишних экспериментов, предусмотрен полезный параметр ‘-whatIf‘ (А что если). При его использовании само действие выполняться не будет, но будут показаны все Id, которые планируются к установке/удалению, а также дополнительная информация (потребуется ли перезагрузка). В последнем случае, чтобы не производить перезагрузку вручную, просто добавляем ключ ‘-restart‘ к вызову ServerManagerCmd. Некоторые роли или компоненты требуют наличия других компонентов, чтобы установить все зависимости, следует добавить ‘-allSubFeatures/-a‘.
Удалить выбранный Id можно так:
> servermanagercmd –remove Web-Server –restart –resultPath result.xml
Параметр ‘–resultPath/-rp‘ позволяет сохранить результат выполнения в файл, что полезно для дальнейшего анализа. Ключи ‘-install‘ и ‘-remove‘ можно использовать только к одному компоненту. Для одновременной установки и/или удаления нескольких ролей более эффективно применять ключ ‘-inputPath‘ с указанием XML файла с настройками (его формат аналогичен полученному при помощи ‘-query‘).
Осталось добавить, что утилита ServerManagerCmd в Server Core отсутствует, а одновременное использование графической и командной оболочек Server Manager вызовет ошибку.
Об утилите Netsh (network shell) написано довольно много, а учитывая ее важность и отличия в реализации в разных версиях Windows, будет написано еще больше. Появилась Netsh в процессе создания Win2k под влиянием продукции Cisco (тогда Microsoft и Cisco Systems имели общие интересы). С ее помощью можно легко просмотреть и изменить сетевые настройки как локальных, так и удаленных систем, управлять настройками WFAS (Windows Firewall with Advanced Security), диагностировать и восстанавливать работу сетевого интерфейса и многое другое. Утилита может работать в автономном и пакетном (т.е. запуск набора команд из сценария) режимах. Группы настроек, относящихся к конкретному сетевому компоненту, в терминологии Netsh называются контекстом. Доступные контексты реализуются посредством подключения DLL, и в разных версиях Windows их свойства и возможности несколько отличаются, поэтому руководства для Netsh от других систем к Win2k8 подходят лишь частично. Чтобы получить помощь по доступным контекстам, открываем консоль CMD.exe и вводим «netsh /?». Получив список контекстов (в Win2k8 их 15, остальные — вспомогательные команды), идем дальше. Например, чтобы узнать команды контекста interface, вводим «netsh interface /?».
Как вариант, все команды можно вводить, перемещаясь по контексту к субконтекстам и параметрам. Другими словами, сначала вводим «netsh» и, получив приглашение консоли «netsh>«, вводим следующую команду, после чего вид приглашения изменится. Чтобы вернуться на уровень вверх, набираем две точки «..». Также нужно знать, что Netsh работает в одном из двух режимов: интерактивный (online) или автономный (offline). В online все команды выполняются сразу после того, как закончен ее ввод. Режим offline позволяет ввести несколько настроек, а затем все их одновременно активировать, введя последней команду commit (отмена — flush) или переключившись в online режим. Чтобы узнать, в каком режиме сейчас находится Netsh, используем «show mode«. Для установки требуемого режима следует ввести online или offline. Например, посмотрим текущие настройки интерфейсов:
netsh> interface
netsh interface> show interface
Сценарий конфигурации интерфейсов смотрим при помощи «interface dump«, при необходимости перенаправляя вывод в файл:
> netsh interface dump > C:\interface.txt > more C:\interface.txt
Полученный таким образом файл можно использовать как шаблон для настройки других компьютеров сети. Для того чтобы указать утилите на файл сценариев, используем флаг ‘–f‘.
Для удобства Netsh предлагает возможность задания псевдонимов (alias), которым можно заменить длинные команды. Например, зададим псевдоним showip, позволяющий получить IP-адрес интерфейса:
netsh> alias showip interface ipv4 show ipaddresses
Проверяем:
netsh> showip
Чтобы установить IP-адрес интерфейса, вместо show используем set:
netsh> interface ipv4 set address name="имя интерфейса, полученное при помощи showip" static 192.168.0.10 255.255.255.0 192.168.0.1
В этом примере интерфейсу задан IP-адрес 192.168.0.10 с соответствующей сетевой маской и шлюзом 192.168.0.1. Динамический адрес задается проще:
netsh> interface ipv4 set address "Local Area Connection" source=dhcp
Заменив в этом примере set на add, можно указать сетевому интерфейсу второй IP-адрес:
netsh> interface ipv4 add address 234.234.234.234 255.255.255.0
В Сети можно найти несколько ресурсов, предлагающих в удобной форме сгенерировать нужную команду для Netsh. Например, по адресу находится генератор команд для привязки IP-адресов к сетевому интерфейсу.
При помощи Netsh можно управлять настройками не только локальной, но и одновременно несколькими удаленными машинами. В этом случае используется ключ ‘–r‘ (или команда «set machine«), после которого указываются WINS/UNC/DNS имена или IP-адреса. Для доступа используем ключ ‘–u‘, после которого задаем учетную запись, от имени которой будем производить действие, и ‘–p‘ – для пароля.
> netsh -r Win1 \\test server.ru -u administrator -p MyPassw0rd showip
В этом примере мы запросили сетевые настройки на трех системах, на которые указали при помощи WINS/UNC/DNS имен.
Аналогично происходит работа и в других контекстах. Используя справку и немного поэкспериментировав, очень легко во всем разобраться. Мы же подробнее рассмотрим настройку WFAS.
Настройка WFAS при помощи Netsh
Контексты advfirewall и firewall позволяют просматривать и управлять настройками встроенного в Win2k8 межсетевого экрана. В WFAS встроено три профиля: доменный (Domain), частный (Private) и общий (Public). Чтобы просмотреть их установки, вводим следующие команды:
netsh> advfirewall show allprofiles
netsh> advfirewall show currentprofile
Контекст firewall (он же advfirewall firewall) непосредственно отвечает за правила брандмауэра. После установки WFAS уже имеет целый ряд заранее подготовленных правил:
netsh> firewall show rule name=all
Приготовься, вывод будет очень большой, поэтому для анализа лучше задать перенаправление в файл. Для каждого правила будет показано его имя, статус (включено/выключено), направление, профиль, локальный/удаленный адрес и порт. Взяв любое из них, на его основе можно легко создать собственные правила.
Для установки нового правила используется команда «add rule«. Например, блокируем входящие соединения на VNC порт (по умолчанию от 5900 до 5906).
netsh> firewall add rule name="Block In VNC" dir=in localport=5900-5906 action=block
Тем, кто ранее создавал правила при помощи графической утилиты, назначение основных параметров должно быть понятно. Так ключ name задает имя правилу (должно быть уникальным, all зарезервировано), если создать несколько правил с одним именем, то они будут рассматриваться как одно правило. Например, вместо одного, можно задать 7 правил name=»Block In VNC», индивидуально указывая localport. Направление трафика (входящий или исходящий) задается при помощи dir=in|out. На действие при совпадении указывает action=allow|block|bypass (в последнем случае разрешаются только авторизованные подключения). Кроме показанных параметров, правило позволяет задать: программу (program=полный_путь), сервис (service=краткое_имя), локальный (localip) или удаленный (remoteip) IP-адрес, тип интерфейса (interfacetype), протокол (protocol) и другие. Для удаления правила используется ключ delete.
Также как и для остальных контекстов, параметр dump позволяет просмотреть и сохранить сценарий настройки в файл, который затем можно использовать как шаблон в других системах.
Не менее полезными являются команды субконтекста «netsh firewall set«. Например, чтобы полностью отключить брандмауэр, достаточно ввести:
netsh> firewall set opmode disable
Для включения, соответственно, меняем disable на enable.
Используя netsh, очень просто открыть или закрыть порт:
netsh> firewall set portopening 80 "Веб-сервер"
По умолчанию порт открывается (mode=ENABLE), чтобы закрыть доступ к порту, используем mode=DISABLE. Можно ограничить доступ к порту только из определенных IP-адресов или сетей:
netsh> firewall set portopening 110 "Локальная POP3 почта" CUSTOM 192.168.0.0/24
Теперь доступ к порту 110 открыт только для компьютеров из сети 192.168.0.0.
Аналогично портам есть возможность блокировки разрешения/доступа для определенных программ — «set allowedprogram». При помощи «set logging» настраивается журналирование работы WFAS.
Служба удаленного управления WinRM
В Vista, Win2k3 R2 и Win2k8 включены мощные средства командной строки, предлагающие системным администраторам улучшенные возможности удаленного управления и удаленного выполнения программ на машинах с Windows. Речь идет о службе удаленного управления WinRM (Windows Remote Management) и ее клиентской части WinRS (Windows Remote Shell).
Перед использованием следует знать, что служба WinRM должна быть запущена на обеих системах, участвующих в управлении, а все узлы должны быть членами одного домена. Подключение производится через стандартные порты 80/443 (HTTP/S), что не требует перестройки правил межсетевого экрана. Если порты уже «заняты» IIS, это не помеха, так как WinRM способен обнаружить «свой» код в потоке. Для выполнения задач используется база данных инструментария управления Windows — WMI (Windows Management Instrumentation).
В Win2k8 WinRM уже установлен, но по умолчанию не включен. Проверим это и перейдем к настройке:
> winrm enumerate winrm/config/Listener > winrm quickconfig
Собственно, будет задан всего один вопрос — хотим ли разрешить удаленный доступ. Отвечаем «y», утилита сообщит об активации WinRM и создании правила исключения для Windows Firewall. Для проверки работы можно снова выполнить первую команду, которая выведет данные о новом Listener.
Для подключения к серверу WinRM используем утилиту winrs, указав через ключ ‘-r’ имя машины и в скобках команды, которые нужно выполнить. Формат вызова такой:
winrs -r:[http|https://]«ServerName»: –u:Domain\Username –p:Password команда
По умолчанию используется http, локальный узел и текущие учетные записи. Вот так мы получим вывод ipconfig на локальной системе:
> winrs ipconfig
А теперь выполним ту же команду на удаленной системе server.com через 80-ый порт:
> winrs -r:server.com ipconfig
Остановить выполнение команды с внушительным выводом можно при помощи комбинации <Ctrl+C> или <Ctrl+Break>.
Удалить созданный WinRM можно следующим образом:
> winrm delete winrm/config/listener?IPAdress=*+Transport=HTTP
Кроме специфических для Win2k8, никуда не делись стандартные утилиты, которые будут полезны для повседневной работы. Так ipconfig используется для просмотра настроек сетевых интерфейсов и обновления параметров DHCP и DNS. Чтобы получить текущие настройки адаптеров, достаточно запустить без дополнительных аргументов. Ключ ‘/all‘ позволит увидеть чуть большее количество параметров. Для просмотра содержимого DNS кэша следует использовать ключ ‘/displaydns’. В результате получаем таблицу с данными: имя узла, адрес, срок жизни и так далее. Чтобы очистить DNS кэш, вводим:
> ipconfig /flushdns
При настройке правил WFAS может понадобиться информация о привязке программ и служб к открытым портам. Получить список открытых портов можно при помощи команды netstat. Ключей у нее много, для нашей задачи полезными будут четыре из них:
- a – отображение всех подключений и портов в режиме ожидания (TIME_WAIT);
- n – вывод адресов и номеров портов в числовом формате;
- b – исполняемый файл, участвующий в создании соединения;
- o – показывать идентификатор процесса.
Смотрим:
> netstat -anbo UDP 0.0.0.0:123 *:* 1024 W32Time [svchost.exe]
Периодически следует запускать эту команду, что контролировать изменения, происходящие в системе. При ручном контроле можно использовать команду find, чтобы отобрать информацию по определенному критерию:
> netstat –anbo | find "LISTENING"
Как вариант, можно сохранить вывод в файл, а затем сравнить старый и новый файл при помощи утилиты fc. Например так:
> netstat –a > netstat-01.12.08.txt > netstat –a > netstat-01.01.09.txt > fc netstat-01.12.08.txt netstat-01.01.09.txt
Без параметров tasklist выведет таблицу всех процессов. Используя дополнительные ключи, можно узнать больше о процессе с нужным PID:
> tasklist /SVC /FI "PID eq 1024"
В результате получим список служб (ключ ‘/SVC’), связанных с процессом, имеющим идентификатор 1024.
INFO
-
Возможности командной строки в Windows Server 2008 существенно изменились.
-
Сервис WinRM использует стандартные 80 и 443 порты.
-
Некоторые подробности по возможностям cmd.exe можно узнать из статьи «» в X_05_2007
WWW
-
Подробнее все параметры ServerManagerCmd описаны в документе «Server Manager Technical Overview Appendix», доступном на .
-
По адресу находится онлайн генератор команд для привязки IP-адреса к сетевому интерфейсу.
Статья опубликована в февральском номере журнала «Xakep» за 2009 год.





