Pull to refresh

Начало работы с AppCmd

Reading time 23 min
Views 29K
Original author: Mike Volodarsky

От себя


Поводом для написания перевода послужило то, что на мой взгляд многие пользователи Windows настолько привыкли к GUI, что порой забывают про существование командной строки. А ведь именно командная строка позволяет автоматизировать многие процессы за короткий промежуток времени. Безусловно командная строка не совершенна, но порой именно она позволяет упростить общение с тех. поддержкой, и свести километровые скриншоты, к нескольким строкам кода.

Введение


Команда AppCmd отдельное самостоятельное средство для управления IIS 7. Она реализует всю основную функциональность по управлению сервером с помощью набора объектов, которые могут управляться через командную строку.
AppCmd позволяет вам легко управлять сервером без использования графического интерфейса и легко автоматизирует управление сервером без написания кода.
Вот то немногое, что вы можете выполнить с помощью AppCmd:
  • Создать и настроть сайты, приложения, пулы приложений и виртуальные каталоги.
  • Остановить, и запустить сайты, повторно запустить пул приложений.
  • Получить список запущенных рабочих процессов и контролировать выполняемые запросы.
  • Искать, управлять, экспортировать и импортировать IIS и ASP.NET конфигурацию.

AppCmd так же позволяет администраторам сервера легко выполнять сложные задачи по управлению, комбинируя несколько команд AppCmd.exe, или используя вывод в других программах.

Как пользоваться AppCmd.exe


AppCmd.exe построена на основе высокоуровневых объектов управления, таких как сайт и приложение. Эти объекты предоставляют методы, которые могут использоваться для выполнения различных действий над этими объектами, а экземпляры объектов предоставляют свойства для чтения и настройки.
Например, объект сайт предоставляет методы для вывода, создания, удаления экземпляров сайта (это стандартные методы, которые присутствуют в большинстве объектов), еще есть методы для запуска и остановки сайта. Каждый экземпляр сайта содержит свойства, такие как имя, идентификатор, и т.д. их можно просматривать, а так же выполнять по ним поиск. Результат каждой такой команды всегда есть список экземпляров объектов.
Замечание: AppCmd.exe находится в каталоге %systemroot%\system32\inetsrv\. Из-за того что это путь не прописан в PATH, необходимо использовать полный путь до команды при выполнении, например: "%systemroot%\system32\inetsrv\AppCmd.exe list sites". Тем не менее, вы можете самостоятельно добавить это путь в PATH и использовать команду напрямую из любого места.
Команда запускается с одним из поддерживаемых объектов управления и необязательными параметрами для уточнения команды:
APPCMD <COMMAND> <OBJECT> <ID> [/parameter1:value1]*
Где <COMMAND> одна из команд поддерживаемых <OBJECT>. Большинство объектов поддерживают базовый набор команд:
  • LIST выводит список объектов. Необязательный <ID> может уточнять объект для вывода. Один или несколько параметров могут уточнить значения свойств, по которым будет осуществлён поиск объектов.
  • ADD создаёт новый объект с перечислением значений свойств, которые будут выставлены в момент создания.
  • DELETE удаляет объект с указанным <ID>.
  • SET меняет значение свойства объекту, указанному по <ID>.

Многие объекты поддерживают дополнительные команды, такие как START и STOP для сайта.
Например, сейчас AppCmd поддерживает следующий список объектов:
Объект Описание
Site Управление сайтом
App Управление приложением
VDir Управление виртуальными каталогами
Apppool Управление пулом приложения
Config Управление конфигурацией
Backup Управление резервными копиями конфигураций
WP Управление рабочим процессом
Request Управление активными HTTP запросами
Module Управление серверными модулями
Trace Управление серверными логами трассировки

Где <ID> идентификатор экземпляра объекта, который вы хотите указать для команды. Формат идентификатора зависит от типа объекта. Например, для объекта сайт — это имя сайта, для объекта приложения используется путь приложения, для пула приложений — имя пула.
Где [/parameter:value]* может быть опущен или содержать несколько параметров, которые влияют на поведение выполнения команды. Каждая команда поддерживает различный набор параметров, зависящий от типа объекта. Обычно, команды, которые выполняют поиск объектов, или меняют свойства объекта, могут указывать названия свойств в качестве параметров.
Утилита сама по себе поддерживает несколько параметров, которые влияют на поведение в целом, и не зависят от каких-то типов объектов. Все они перечислены в начале справки, которую можно получить, выполнив "AppCmd.exe /?", и содержит такие параметры как /text, /config и /xml для управления выводом и /commit для определения уровня в иерархии, где изменения в конфигурации будут примерены.

Работаем со справкой


AppCmd предоставляет удобную систему предоставления справки, которую можно получить для всех поддерживаемых типов объектов и команд. Существует три типа справки по типам запрашиваемой информации.

Общая информация

Общая информация показывает доступные объекты, а также общие параметры. Чтобы получить общую информацию достаточно набрать:
APPCMD /?

Вывод:
General purpose IIS command line administration tool.
APPCMD <COMMAND> <OBJECT> <ID> < /parameter1:value1 ... >

Supported object types:
	SITE      Administration of virtual sites
	APP       Administration of applications              
...         

Информация по объекту

Информация по объекту показывает список команд доступных определенному типу объектов.
APPCMD <OBJECT> /?
Где <OBJECT> имя одного из поддерживаемых объектов. Например, команда вывода информации по объекту site будет выглядеть так:
APPCMD site /?


Информация по команде

Информация по команде содержит информацию по синтаксису, который определён для каждой команды, и включает в себя доступные параметры и примеры часто встречающихся задач. Чтобы увидеть эту справочную информацию выполните:
APPCMD <COMMAND> <OBJECT> /?

Например, чтобы увидеть информацию по команде LIST для типа объектов APP выполните:
APPCMD list app /?	


Поиск объектов


Команда LIST очень разносторонняя и поддерживается всеми типами объектов. Назначение команды — поиск экземпляров объектов по заданному критерию. На выходе команды получается список экземпляров объектов, которые вы можете просмотреть, изучить значения свойств, экспортировать для последующего создания на других серверах. Или использовать вместе с другой программой для выполнения над ними действий.

Вывод всех объектов

Самое простое – это вызвать команду LIST без параметров, это выведет все существующие на сервере экземпляры объектов:
APPCMD list <OBJECT>

Например, чтобы просмотреть все сайты на сервере используйте следующую команду.
%systemroot%\system32\inetsrv\APPCMD list sites

Вывод будет содержать следующее:
SITE "Default Web Site" (id:1,bindings:HTTP/*:80:,state:Started)
SITE "Site1" (id:2,bindings:http/*:81:,state:Started)
SITE "Site2" (id:3,bindings:http/*:82:,state:Stopped)

По-умолчанию, каждый следующий объект показывается в отдельной строке и содержит идентификатор (такой как «Default Web Site») и один или несколько значимых свойств (таких как ID, привязку и состояние)
Вывод определенного объекта

Команда LIST может использоваться для поиска экземпляра объекта с конкретным именем объекта, используя команду следующего плана
APPCMD list <OBJECT> <ID>

Например, чтобы найти сайт с уникальным идентификатором «Default Web Site» используйте следующую строку:
%systemroot%\system32\inetsrv\APPCMD list site "Default Web Site"

Вывод объекта по критерию

Чтобы найти все объекты, удовлетворяющие заданному критерию, укажите одно или несколько параметров, которые содержат требуемые значения для поиска. Например, следующая команда ищет все сайты, которые остановлены:
%systemroot%\system32\inetsrv\APPCMD list sites /state:Stopped 

Вы можете указать любое количество пар свойство-значение, и команда вернёт все объекты, которые удовлетворяют всем заданным критериям. Например, следующая команда найдёт все сайты, которые одновременно остановлены и в тоже время сконфигурированы не запускаться автоматически.
%systemroot%\system32\inetsrv\APPCMD list sites /serverAutoStart:false /state:Stopped

Управление объектами


В дополнение к List большинство объектов поддерживают команды ADD, SET и DELETE.

Добавление нового объекта

Команда ADD создает новый экземпляр объекта. Например, эта команда создает новый сайт:
%systemroot%\system32\inetsrv\APPCMD add site /name:MyNewSite /bindings:"http/*:81:" /physicalPath:"C:\MyNewSite"

В зависимости от объекта, некоторые параметр могут быть обязательными, а некоторые нет.
Если обязательный параметр не указан — вернётся ошибка.
Команда вызова справки покажет, какие параметры являются обязательными. Например, используйте следующую команду, чтобы увидеть какие параметры являются обязательными при создании сайта:
%systemroot%\system32\inetsrv\APPCMD add site /?

Изменение существующего объекта

Команда SET меняет одно или несколько свойств указанного экземпляра объекта. Этой команде необходимо, чтобы был указан идентификатор экземпляра объекта. Например, чтобы поменять свойство ID у «Default Web Site», используйте следующую команду:
%systemroot%\system32\inetsrv\APPCMD set site «Default Web Site» /id:200
Синтаксис вызова информации можно использовать и для того, чтобы просмотреть список свойств, который можно изменить на конкретном объекте. Например, чтобы посмотреть свойства, поддерживаемые «Default Web Site» наберите:
	%systemroot%\system32\inetsrv\%systemroot%\system32\inetsrv\APPCMD set site "Default Web Site" /?

Удаление Объектов

Команда DELETE удаляет экземпляр объекта. Так же как и SET, этой команде необходимо передать идентификатор объекта. Например, используйте следующую команду, чтобы удалить сайт с названием «MyNewSite»:
%systemroot%\system32\inetsrv\%systemroot%\system32\inetsrv\APPCMD delete site "MyNewSite"

Управление резервными копиями


AppCmd позволяет вам создавать или восстанавливать резервные копии конфигураций сервера. Вы можете это использовать для восстановления случайных изменений в конфигурации сервера, и откатить конфигурацию к состоянию, на котором работа сервера была стабильной. Хорошей практикой считается делать резервные копии до того как менять конфигурацию, или устанавливать компоненты, которые ее меняют. Каждая такая копия содержит текущий ApplicationHost.config корневого файла конфигурации, так же и другие настройки сервера, как FTP и настройки инструментов администрирования.
Чтобы создать резервную копию, используйте команду ADD объекта BACKUP
%systemroot%\system32\inetsrv\APPCMD add backup
	
BACKUP object "20060519T172530" added

Эта резервная копия с автоматически сгенерированным именем, в котором указаны дата и время копирования.
Определенное имя резервной копии тоже можно указать, например, так:
%systemroot%\system32\inetsrv\APPCMD add backup MyBackup
	
BACKUP object "MyBackup" added

Вы можете просмотреть список резервных копий, используя команду LIST:
%systemroot%\system32\inetsrv\APPCMD list backups
	
BACKUP "20060519T172530"
BACKUP "MyBackup"

И, наконец, для восстановления из резервной копии используйте команду RESTORE вместе с именем резервной копии:
%systemroot%\system32\inetsrv\APPCMD restore backup "MyBackup"

Restored configuration from backup "MyBackup"

Восстановление из резервной копии останавливает сервер и восстанавливает полную конфигурацию по состоянию на дату, когда была сделана резервная копия.
В операционных системах Windows 2008 и Windows Vista SP1, у AppCmd будет возможность работать с периодическим резервным копированием, осуществляемым системным сервисом. Эти резервные копии доступны среди списка всех резервных копий, которые были получены командой AppCmd и доступны для отката тем же способом, как и остальные.
Для детального изучения управления резервными копиями с помощью AppCmd можно почитать тут.

Работа с Сайтами, приложениями, виртуальными папками и пулами приложений


Создание и управление сайтами, приложениями, виртуальными каталогами наиболее частые задачи, с которыми сталкивается администратор. IIS 7 и выше придерживаются более строгой иерархии, чем предыдущие версии, сейчас иерархия выглядит примерно так:
  1. Веб-сайт. Веб-сайт принимает запросы по определенной привязанной конечной точке, определяемой по IP адресу и заголовку хоста. Например, следующий URL представляет сайт, привязанный к порту 81: www.mysite.com:81
    Веб-сайт содержит одно или несколько приложений.
  2. Приложение. Приложение определенно по его виртуальному пути вместе с пространством имен сайта. Например, приложение с виртуальным путем /app1 может быть представлено следующим URL www.mysite.com:81/app1
    Приложение относиться к пулу приложений.
    Приложение содержит одно или несколько виртуальных каталогов.
  3. Виртуальный каталог представлен его виртуальным путем вместе с пространством приложения. Например, виртуальный каталог с виртуальным путем /vdir1 может иметь следующий URL www.mysite.com:81/app1/vdir1.
    Виртуальный каталог указывает на физическое положение на диске.

Эта иерархия отличается от той, что была в IIS 6, где Веб-сайт мог содержать смесь виртуальных каталогов и приложений, а приложения были всего лишь специально отмеченные виртуальные каталоги.
Пул приложений. Пул приложений определен группой настроек для рабочего процесса, который выполняет обработку запросов для приложений в этом пуле приложений. Пул приложений не является частью иерархии сайт-приложение-каталог. Каждое приложение определяется пулом, в котором оно будет работать, иначе приложение будет работать в пуле приложений, определенным по умолчанию.
Пул приложений определяется такими настройками как количество рабочих процессов, загружаемой версией CLR, типом интеграции, учетной записью, под которым процесс будет исполняться, и настройками повторного запуска процесса.
По-умолчанию, IIS 7 и выше устанавливаются с Веб-сайтом «Default Web Site», который прослушивает порт 80, и у которого нет ограничений по адресу и заголовку хоста. Сайт содержит в себе корневое приложение, и это приложение имеет корневой виртуальный каталог. Так же есть пул приложений «DefaultAppPool», который используется как пул приложений по умолчанию для всех создаваемых приложений.
Эта команда выведет все сайты, включая «Default Web Site»
%systemroot%\system32\inetsrv\APPCMD list sites
        
SITE "Default Web Site" (id:1,bindings:HTTP/*:80:,state:Started) 

Давайте посмотрим приложения, которые принадлежат сайту Default Web Site, для этого укажем свойство site.name в команде вывода приложений:
%systemroot%\system32\inetsrv\APPCMD list apps /site.name:"Default Web Site"
          
APP "Default Web Site/" (applicationPool:DefaultAppPool) 

Похожая команда покажет все виртуальные каталоги, содержащиеся в приложении «Default Web Site/», для этого укажем свойство app.name в команде перечисления виртуальных каталогов.
%systemroot%\system32\inetsrv\APPCMD list vdirs /app.name:"Default Web Site/" 
        
VDIR "Default Web Site/" (physicalPath:C:\inetpub\wwwroot) 

Наконец, давайте просмотрим список пулов приложений:
%systemroot%\system32\inetsrv\APPCMD list apppools
        
APPPOOL "DefaultAppPool" (MgdVersion:v2.0,MgdMode:Integrated,state:Started)
APPPOOL "Classic .NET AppPool" (MgdVersion:v2.0,MgdMode:ISAPI,state:Started)

Создание сайтов, приложений, виртуальных каталогов, пулов приложений

Сейчас мы с вами создадим сайт с названием «MySite» и Id 2, который будет прослушивать порт 81 для всех IP адресов и заголовков хоста.
%systemroot%\system32\inetsrv\APPCMD add site /name:MySite /id:2 /bindings:http/*:81: /physicalPath:C:\inetpub\mysite
	
SITE object "MySite" added
APP object "MySite/" added
VDIR object "MySite/" added

Параметр name должен быть указан для того, чтобы создать веб-сайт. Параметр Id не обязательный, в этом случае AppCmd сгенерирует следующий доступный Id для нового сайта. Мы так же указали привязку и физический путь, которые будут описаны ниже. Вы можете так же указать дополнительные параметры, чтобы назначить им значения.
Свойство bindings (привязка) использует формат protocol/bindingInformation, где bindingInformation — протокол. Для FTP используется следующий формат IP:PORT:HOSTHEADER. Вы можете указать несколько привязок, используя запятую для связки между различными значениями.
Так же мы указали physicalPath свойство для сайта. Так как сайт сам по себе не имеет физического пути, это короткая форма используется для создания корневого приложения, и корневого виртуального каталога связанного с указанным физическим каталогом.
Если вы не укажете физический путь — сайт создастся без приложений; приложение и виртуальный каталог нужно будет создать явно.
Ну что ж, двигаемся дальше и создаем следующее приложение для нашего сайта:
%systemroot%\system32\inetsrv\APPCMD add app /site.name:MySite /path:/app1 /physicalPath:C:\inetpub\mysite\app1
	
APP object "MySite/app1" added
VDIR object "MySite/app1/" added

Команда создала новый виртуальный каталог "/app1" для приложения созданного ранее, виртуальный каталог, указывающий на «C:\inetpub\mysite\app1». Обязательный параметр path определяет виртуальный путь нового приложения, а обязательный параметр site.name определяет сайт, к которому будет относиться это приложение. Необязательный параметр physicalPath — короткая форма, очень похожая как для сайта, которая создает корневой виртуальный каталог вместе с приложением.
Если вы не укажете physicalPath, или добавите еще один виртуальный каталог командой, такой как следующая:
%systemroot%\system32\inetsrv\APPCMD add vdir /app.name:"MySite/app1" /path:/vdir1 /physicalPath:C:\inetpub\mysite\app1\vdir1
	
VDIR object "MySite/app1/vdir1" added

то эта команда создаст новый виртуальный каталог, с виртуальным путем "/vdir1" относящийся к приложению, созданному ранее и указывающим на «C:\inetpub\mysite\app1\vdir1» обязательный path определяет виртуальный путь нового виртуального каталога, и обязательный app.name определяет приложение, к которому будет принадлежать эта виртуальный каталог. physicalPath параметр указывает на физический путь, к которому будет привязан виртуальный каталог.
Напоследок давайте создадим новый пул приложений:
%systemroot%\system32\inetsrv\APPCMD add apppool /name:MyAppPool

APPPOOL object "MyAppPool" added

Эта команда создает новый пул приложений с именем «MyAppPool».
Для более детального изучения сайтов, приложений, виртуальных каталогов в IIS 7 и разных возможностей доступных через AppCmd, можно обратиться сюда.

Настройка сайтов, приложений, виртуальных каталогов, и пулов приложений.

Ранее мы создали новый веб-сайт, добавили несколько приложений и виртуальных каталогов. Сейчас мы будем использовать AppCmd для изменения некоторых свойств этих объектов. Все AppCmd объекты поддерживают следующий синтаксис для установки свойств:
APPCMD SET <OBJECT> <ID> [/property:value]*

Для начала давайте посмотрим, какие приложения доступны на сервере:
%systemroot%\system32\inetsrv\APPCMD list apps
	
APP "Default Web Site/" (applicationPool:DefaultAppPool)
APP "MySite/" (applicationPool:DefaultAppPool)
APP "MySite/app1" (applicationPool:DefaultAppPool)

Помните два приложения созданные ранее под веб-сайтом MySite. Оба эти приложения настроены использовать DefaultAppPool пул приложений. Давайте поменяем свойство applicationPool у нашего корневого приложения MySite/ таким образом, чтобы он использовал новый пул приложения, созданный ранее с именем MyAppPool
%systemroot%\system32\inetsrv\APPCMD set app "MySite/" /applicationPool:MyAppPool
  
APP object "MySite/" changed

Таким образом мы поменяли значение свойства applicationPool нашего приложения «MySite/», легко перенесли наше приложение в новый пул приложений.
Цель такого переноса заключается в том, что мы теперь можем поменять несколько параметров запуска рабочего процесса, с которыми будет работать наше приложение, чтобы так сделать мы поменяем некоторые свойства пула приложений «MyAppPool». Перед тем как менять полезно, посмотреть доступные свойства и их текущие значения. Мы можем просмотреть свойства детально так:
%systemroot%\system32\inetsrv\APPCMD list apppool "MyAppPool" /text:*
    
APPPOOL
	APPPOOL.NAME: MyAppPool
	managedPipelineMode: Integrated
	managedRuntimeVersion: v2.0
	state: Started
	[add]
		name:"MyAppPool"
		queueLength:"1000"
		autoStart:"true"
		enable32BitAppOnWin64:"false"
		managedRuntimeVersion:"v2.0"<identifier>
		managedPipelineMode:"Integrated"
		passAnonymousToken:"true"
		[processModel]
			identityType:"NetworkService"
			userName:""
			password:""
	...
		pingingEnabled:"true"
	...


Вот часть этих свойств. Полный список тут не показан.
Нас интересует свойство managedRuntimeVersion, значение которого мы поменяем на «v1.1» для того, чтобы запустить наше приложение в пуле приложений с asp.net v1.1. Вот эта команда:
%systemroot%\system32\inetsrv\APPCMD set apppool "MyAppPool" /managedRuntimeVersion:v1.1

APPPOOL object "MyAppPool" changed

Вы можете видеть выше, что есть доступные свойства, и некоторые их них вложены в другой элемент. Например свойство process вложено в processModel. Если вы хотите изменить вложенное свойство, укажите его полностью как тут:
%systemroot%\system32\inetsrv\APPCMD set apppool "MyAppPool" /processModel.pingingEnabled:false	  

Другие элементы конфигурирования

Дополнительно, чтобы управлять свойствами конфигурации с помощью объектов AppCmd, вы можете выставлять значения любым свойствам в любой конфигурационной секции, включая тех, что являются объектами AppCmd. Подробнее об этом будет рассказано в секции «Работа с конфигурацией».
получение состояния сервера
AppCmd предоставляет возможность получить различные сведения о работе сервера, включая:
  • состояние сайта
  • состояние пула приложений
  • активные рабочие процессы сервера
  • текущие выполняемые запросы.

В дополнение, некоторые объекты предоставляют команды, которые позволяют контролировать состояние времени работы. Такие команды как STOP объекта сайт, или RECYCLE объекта пула приложений.

Просмотр сайта и пула приложений

Состояние сайта и пула приложений отражено в свойстве state каждого объекта. Когда получаем список сайтов и пула приложений состояние отображается а стандартном выводе. Например:
%systemroot%\system32\inetsrv\APPCMD list apppools DefaultAppPool

APPPOOL "DefaultAppPool" (MgdVersion:v2.0,MgdMode:Integrated,state:Started)

Свойство state может использоваться при поиске сайтов или пула приложений, которые сейчас находятся в конкретном состоянии. Например, чтобы найти все запущенные пулы приложений:
%systemroot%\system32\inetsrv\APPCMD list apppools /state:started

APPPOOL "DefaultAppPool" (MgdVersion:v2.0,MgdMode:Integrated,state:Started)
APPPOOL "Classic .NET AppPool" (MgdVersion:v2.0,MgdMode:ISAPI,state:Started)	

Просмотр рабочих процессов

Используйте объект WP, чтобы получить список запущенных рабочих процессов.
%systemroot%\system32\inetsrv\APPCMD list wp

WP "3577" (apppool:DefaultAppPool)

Каждый WP объект имеет свойство apppool.name, которой позволяет вам получить все рабочие процессы обслуживающие конкретный пул приложений:
%systemroot%\system32\inetsrv\APPCMD list wp /apppool.name:DefaultAppPool
        
WP "3577" (apppool:DefaultAppPool)

Изучение текущих запросов

Объект Request позволяет вам исследовать текущие запросы обрабатываемые сервером:
%systemroot%\system32\inetsrv\APPCMD list requests

REQUEST "fb0000008000000e" (url:GET /wait.aspx?time=10000,time:4276 msec,client:localhost)

Список запросов можно отфильтровать по таким критериям как сайт, пул приложений, рабочий процесс, или URL используя соответствующее свойство в качестве фильтра.
Вот несколько примеров:
%systemroot%\system32\inetsrv\APPCMD list request /apppool.name:DefaultAppPool
%systemroot%\system32\inetsrv\APPCMD list requests /wp.name:3567
%systemroot%\system32\inetsrv\APPCMD list requests /site.id:1

Работа с конфигурацией


IIS 7 и выше обладает основанной на XML иерархической системой конфигурации, похожей на систему конфигурации ASP.NET, которая хранит конфигурацию сервера в схематизированных XML секциях.
конфигурация может находиться на уровне сервера в файле ApplicationHost.config или же находиться в файле Web.config, поставляемом вместе с приложением.
AppCmd позволяет полностью ознакомиться и менять конфигурацию из командной строки с помощью объекта config. Так же AppCmd предоставляет такие полезные функции как чтение, блокировка, разблокировка, поиск.

Просмотр конфигурации

AppCmd работает с конфигурацией на уровне конфигурационных секций. Каждая секция описывает серверную функциональность и может содержать одно или несколько элементов и коллекций.
Конфигурация может быть установлена для любого пространства имен URL, например, для сайта, приложения или ссылку. Параметры конфигурации установлены на более высоком уровне, наследуются на всех более низких уровнях, если они не переопределены на более низких уровнях.
Чтобы просмотреть эффективную конфигурацию для конкретного уровня, используйте команду LIST объекта Config, например, так:
%systemroot%\system32\inetsrv\APPCMD list config <URL> /section:SectionName

где <URL> путь конфигурации, которая должна быть прочитана. Например «Default Web Site/» или «Default Web Site/app1/hello.html». Если ничего не указано, то будет прочитана конфигурация уровня сервера.
Для детального изучения иерархии и того как построить конфигурацию для использования с AppCmd и в других программах можно прочитать тут.
Параметр section указывает на секцию, которую надо прочитать. Если не указать, то будет показана вся конфигурация, действующая по заданному URL. Например, следующая команда покажет всю конфигурацию примененной для корневого приложения «Default Web Site»:
%systemroot%\system32\inetsrv\APPCMD list config "Default Web Site/"

Чтобы показать конкретную секцию и спользуйте следующую команду:
%systemroot%\system32\inetsrv\APPCMD list config "Default Web Site/" /section:aspx

<system.webServer>
	<asp>
		<session />
		<comPlus />
		<cache />
		<limits />
	</asp>
</system.webServer>

По умолчанию, AppCmd показывает конфигурацию, которая выставлена явно. Если вы хотите посмотреть вычисленную конфигурацию, включая унаследованную, укажите /config:* параметр
%systemroot%\system32\inetsrv\APPCMD list config "Default Web Site/" /section:asp /config:*

Чтобы посмотреть список доступных секций используйте следующую команду:
%systemroot%\system32\inetsrv\APPCMD list config /section:?

Редактирование свойств конфигурации

В AppCmd каждая секция представлена объектом конфигурации, которая содержит свойства, которые соответствуют конфигурационной секции. Используйте SET команду для того, чтобы изменить эти свойства. Синтаксис такой:
APPCMD set config <URL> /section:SectionName [ /property:value ]+
<URL> необязательный параметр, он определяет конфигурационный путь, к которому эти изменения будут применены. Если это не указывать, изменения будут применены на уровне сервера. И будут наследованы всеми остальными URL
Параметр section обязателен, он определяет секцию, которая будет отредактирована.
Например, установить свойство appAllowClientDebug секции asp для localhost/app1 можно так:
%systemroot%\system32\inetsrv\APPCMD set config "http://localhost/app1" /section:asp /appAllowClientDebug:false
  
CONFIG object "asp" changed

Установить свойство вложенное в под элемент конфигурационной секции можно используя этот элемент с указанием пути:
%systemroot%\system32\inetsrv\APPCMD set config "http://localhost/app1" /section:asp /limits.requestQueueMax:4000

CONFIG object "asp" changed

Укажите несколько свойств в одной командной строке, чтобы отредактировать сразу несколько значений в пределах одной секции.
Чтобы посмотреть все свойства, которые можно отредактировать в пределах одной секции используйте команду:
%systemroot%\system32\inetsrv\APPCMD set config /section:asp /?

Замечание: секция asp по умолчанию закрыта для редактирования, таким образом выполнение этой команды вернет ошибку нарушения блокировки. Но можно сначала снять блокировку, настроив конфигурацию на уровне сервера, опуская <URL>, или передать их на место теги уровне сервера с помощью /commit: apphost. Смотрите контроль расположения конфигурации далее в статье.

Редактирование конфигурационных коллекций

AppCmd предоставляет возможность редактировать конфигурационные коллекции. Конфигурационная коллекция может содержать несколько элементов — например, system.webServer/modules секция содержит список модулей, которые будут выполняться на сервере.
Чтобы поменять свойство в элементе списка, нужно конкретизировать элемент коллекции, используя индекс элемента вместе с указанием пути. Индекс — это выражение, использующее значение ключей, чтобы указать на конкретный элемент коллекции. Индекс имеет следующий формат:
[key1='value1',key2='value2',...]
Количество ключей, необходимых, чтобы указать конкретный элемент зависит от типа коллекции, но в большинстве случаев одного достаточно.
Например, чтобы изменить тип свойства на элементе коллекции с ключом name равным «FormsAuthentication» выполните:
%systemroot%\system32\inetsrv\APPCMD set config /section:system.webServer/modules /[name='FormsAuthentication'].type:System.Web.Security.FormsAuthenticationModule

Чтобы добавить новый элемент в коллекцию, добавьте в начало имени элемента знак "+". А вместо индекса, перечислите значения для каждого свойства. И еще, не ключевые свойства, так же могут быть включены в индекс коллекции. Например, так можно добавить новый элемент в список модулей:
%systemroot%\system32\inetsrv\APPCMD set config /section:system.webServer/modules /+[name='MyModule',type='MyType']

Чтобы удалить элемент из списка — надо указать в начале знак "-":
%systemroot%\system32\inetsrv\APPCMD set config /section:system.webServer/modules /-[name='MyModule']

Управление расположением настройки

Система конфигурирования — иерархическая, и позволяет изменениям быть записанными на различных уровнях начиная с серверного уровня (ApplicationHost.config), заканчивая предоставляемым файлом web.config уровня сайта, приложения, виртуального каталога.
Когда изменение пишется на какой-нибудь уровень, это изменение наследуется всеми URL, которые ниже этого уровня. Например, изменение, сделанное в Web.config корневого сайта — будет применено на всем сайте.
По умолчанию AppCmd пишет изменения на том уровне, которое было выбрано для изменения. Например, если вы меняете значение для «Default Web Site/», изменение будет записано в Web.config файл, расположенный в корне сайта.
Тем неменее, возможно изменить на уровне выше, и применить это изменение на множестве URL использую тег location. Например, приложение может содержать конфигурацию, которая применима на одном из каталогов приложения. AppCmd предоставляет такую возможность с помощью параметра commit.
Параметр commit может иметь следующие значения:
  • (omitted) — значение по умолчанию, изменения применяются на том же уровне, на котором и выставляются.
  • url — то же что и значение по умолчанию.
  • site — изменения пишутся в корневой web.config сайта
  • app — изменения пишутся в Web.config в корень приложения.
  • apphost — изменения пишутся на уровне сервера в applicationHost.config
  • <PATH> — изменения пишутся в заданный файл.

Например, эта команда отключит возможность просматривать содержимое каталога в приложении и запишет изменения в web.config уровня сайта:
%systemroot%\system32\inetsrv\APPCMD set config http://localhost/app1/ /section:directoryBrowse /enabled:false /commit:site

Подробнее почитать про конфигурирование IIS и хранение изменений можно тут.

Блокирование и разблокирование конфигурации

Система конфигурирования позволяет блокировать секцию на каком-то из уровней, запрещая их изменение на более низких уровнях. Это можно использовать, чтобы запретить приложению менять настройки, которые администратор хочет применить на всем сервере.
По умолчанию, большинство настроек IIS раскрыты, для редактирования на уровне сервера. Чтобы иметь возможность их редактировать, нужно их открыть. AppCmd предоставляет такую возможность:
%systemroot%\system32\inetsrv\APPCMD unlock config /section:asp

и наоборот, чтобы закрыть возможность изменений:
%systemroot%\system32\inetsrv\APPCMD lock config /section:asp

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

Поиск конфигурации

AppCmd может искать в представленной иерархии конфигураций все секции в которых конкретное свойство меняется или имеет заданное значение. Возможность поиска конфигурации может быть использована для поиска какой-нибудь функции которая была включена, или для того чтобы убедиться в соответствии требованиям текущего окружения.
Найти на сервере все места, где определяется конфигурация можно так:
%systemroot%\system32\inetsrv\APPCMD search config

Для поиска всех мест, для заданного конфигурационного пути, где меняются настройки заданного сайта, добавьте путь:
%systemroot%\system32\inetsrv\APPCMD search config "Default Web Site/" 

Для того, чтобы найти все конфигурации, где меняется заданная секция:
%systemroot%\system32\inetsrv\APPCMD search config "Default Web Site/" /section:directoryBrowse

Для того, чтобы найти места, где меняется значение определенного свойства секции:
%systemroot%\system32\inetsrv\APPCMD search config "Default Web Site/" /section:directoryBrowse /enabled

И наконец, чтобы найти все места, где свойству устанавливается заданное значение:
%systemroot%\system32\inetsrv\APPCMD search config "Default Web Site/" /section:directoryBrowse /enabled:true

Работа с выводом


Ранее вы упоминали, что вывод команды LIST это список экземпляров объектов. AppCmd позволяет использовать различные типы вывода, которые позволяют контролировать уровень детализации по выводимым объектам.

Стандартный вывод

Давайте посмотрим вывод команды LIST для сайтов. По умолчанию, AppCmd использует компактный формат вывода:
%systemroot%\system32\inetsrv\APPCMD list sites

SITE "Default Web Site" (id:1,bindings:HTTP/*:80:,state:Started)
SITE "Site1" (id:2,bindings:http/*:81:,state:Started)
SITE "Site2" (id:3,bindings:http/*:82:,state:Stopped)

При таком выводе каждый объект выводится в одну строку, и содержит информацию о типе (SITE), идентификаторе («Default Web Site»). Несколько общих или важных свойств так же находятся в выводе (id, bindings, и state обьекта сайт)

Детальный вывод

Большинство объектов поддерживают значительно больше свойств, чем те что присутствуют в стандартном выводе. Чтобы просмотреть все свойства объекта, надо указать text:* параметр, и свойства каждого экземпляра покажутся в формате дерева:
APPCMD list site "Default Web Site" /text:*

SITE
	SITE.NAME: Default Web Site
	SITE.ID: 2
	bindings: http/*:80:
	state: Started
...

В примере выше вывод был обрезан, реальный вывод содержит много больше строк.

Вывод для других утилит командной строки

AppCmd предоставляет возможность выводить только значение заданного свойства, каждого экземпляра. Задайте значение свойства в параметре text:. Например, следующая команда вернет виртуальные каталоги всех приложений, покажет только свойство physicalPath каждого элемента:
%systemroot%\system32\inetsrv\APPCMD list vdirs /text:physicalPath
	  
C:\inetpub\wwwroot
C:\inetpub\vdir1
D:\vdir2

Конечно же вы можете показать любое определенное свойство, перечисленных типов объектов.
Иногда очень удачно можно использовать вывод AppCmd с другими существующими командами и командами оболочки, каких как for и findstr.exe. Эти команды работают лучше, если интересующие объекты расположены в отдельной строке.
Как пример, представьте команду, которая генерирует содержимое каждого виртуального каталога IIS. Эта команда требует на вход список физических путей каждого виртуального каталога, и выполнить DIR, каждого такого каталога использовать FOR для организации цикла по ним.
FOR /F %f IN ('%systemroot%\system32\inetsrv\APPCMD list vdir /text:physicalPath') DO CALL DIR %f

Вывод конфигурации

Объекты содержат в себе конфигурационные данные, которые являются частью соответствующей конфигурационной секции. Config объект — главный этому пример, и является обычной оберткой над конфигурационной системой IIS. Любой объект возвращаемый командой config — есть конфигурационная секция. Другие же объекты, такие как сайт, содержат конфигурационную информацию в виде своих свойств.
Если вы хотите вывести конфигурационную информацию возвращенных объектов в формате XML — используйте параметр config. Чтобы показать XML конфигурацию для сайта используйте:
%systemroot%\system32\inetsrv\APPCMD list site "Default Web Site" /config
	  
<site name="Default Web Site" id="1">
<bindings>
<binding protocol="HTTP" bindingInformation="*:80:" />
...

XML вывод

Команда еще поддерживает собственный xml формат вывода, который генерирует сформированный xml для объектов возвращенных командой. Это открывает нам интересные возможности, которые отличает от всех других утилит командной строки, представленных нам ранее командой IIS.
  • Построение сложных задач управления. Основная предпосылка этой возможности позволить нам, чтобы вывод одной команды AppCmd, был бы вводом для другой. Это позволяет вам решать сложные задачи управления без написания дополнительного кода.
  • Эффективное выполнение группы операций. Выполнение команды много раз когда выполняется большое количество операций (например, создание 10 000 сайтов) может быть очень медленным из-за перерасхода ресурсов при создании процессов, инициализации каждой операции. Вместо этого одна команда может принять на вход XML, динамически уменьшая время обработки входных данных.
  • Экспорт данных в другие программы. XML формат данных AppCmd позволяет им быть использованным в других программах, для обработки или создании отчетов. Например, AppCmd может быть использован весте с xslt преобразованием, чтобы сгенерировать html отчет, импортировать в SQL сервер для дальнейшей обработки, или задействовать ADO.NET для программной обработки.

Следующая команда выводит список сайтов в формате xml:
%systemroot%\system32\inetsrv\APPCMD list sites /xml

Для более глубокого изучения можно прочитать тут

Итог


В этом обзоре мы познакомили вас с различными действенными командами доступными в командной AppCmd IIS 7 и выше.
Вы так же можете познакомиться с различными путями управлением сервером с помощью командной строки тут
Tags:
Hubs:
+6
Comments 12
Comments Comments 12

Articles