начало работы с AppCmd.exe

Майк Володарский

Общие сведения

AppCmd.exe — это единая программа командной строки для управления СЛУЖБАми IIS 7 и более поздних версий. Он предоставляет все функции управления ключевыми серверами с помощью набора интуитивно понятных объектов управления, которыми можно управлять из командной строки или из скриптов.

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

Некоторые действия, которые можно выполнить с помощью AppCmd:

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

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

Дополнительные разделы AppCmd и эффективные способы управления сервером из командной строки также можно найти в моем блоге по адресу https://mvolo.com/category/appcmd/.

Использование AppCmd.exe

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

Например, объект Site предоставляет методы для перечисления, создания и удаления экземпляров сайта (это стандартные методы, которые присутствуют почти во всех объектах), а также для остановки и запуска сайтов. Каждый экземпляр сайта, в свою очередь, будет содержать свойства, такие как имя сайта и идентификатор сайта, которые можно проверить, найти или задать. Выходными данными каждой команды всегда является список экземпляров объектов.

Примечание

AppCmd.exe находится в каталоге %systemroot%\system32\inetsrv\ . Так как он не является частью PATH автоматически, необходимо использовать полный путь к исполняемому файлу при выполнении таких команд, как в %systemroot%\system32\inetsrv\AppCmd.exe list sites. Кроме того, можно вручную добавить каталог inetsrv в путь на компьютере, чтобы получить доступ к AppCmd.exe непосредственно из любого расположения.

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

APPCMD (command) (object-type) <identifier> < /parameter1:value1 ... >*

Где <COMMAND> — одна из команд, поддерживаемых <OBJECT>. Большинство объектов поддерживают этот базовый набор команд:

  • СПИСОК Отображение объектов на компьютере. Необязательный <идентификатор> может указывать уникальный объект для перечисления или один или несколько параметров для сопоставления со свойствами объекта.
  • ДОБАВИТЬ Создайте новый объект с указанными свойствами объекта, которые будут заданы во время создания.
  • УДАЛИТЬ Удалите объект, указанный идентификатором<>.
  • УСТАНОВИТЬ Задайте параметры для объекта, заданного идентификатором<>.

Объект часто поддерживает дополнительные команды, такие как START и STOP для объекта Site.

Например, текущий набор объектов, доступных через AppCmd, — это (где <OBJECT> — это один из объектов управления, поддерживаемых средством):

Объект Описание
Сайт Администрирование виртуальных сайтов
Приложение Администрирование приложений
VDir Администрирование виртуальных каталогов
Apppool Администрирование пулов приложений
Config Администрирование разделов общей конфигурации
Backup Управление резервными копиями конфигурации сервера
WP Администрирование рабочих процессов
Запрос Отображение активных HTTP-запросов
Модуль Администрирование серверных модулей
Трассировка Управление журналами трассировки сервера

Где <ID> — идентификатор конкретного объекта для экземпляра объекта, который требуется указать для команды. Формат идентификатора зависит от каждого типа объекта. Например, объект Site использует имя сайта, объект App — путь к приложению, а объект AppPool — имя пула приложений.

Где [ /parameter:value ]* равно нулю или больше параметров для команды. Каждая команда поддерживает разные наборы параметров в зависимости от объекта . Как правило, команды, которые ищут объекты или управляют свойствами объектов, позволяют указать любое из свойств объекта в качестве параметра.

Само средство также поддерживает ряд параметров, влияющих на выполнение общих команд, и не относится ни к одному из объектов . Они перечислены на странице справки верхнего уровня, доступной в разделе "AppCmd.exe /?", и включают такие параметры, как /text, /config и /xml для управления выходными данными средства и /commit для управления расположением изменений конфигурации.

Получение справки

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

Общая справка

На экране общей справки отображаются объекты, поддерживаемые средством, а также общие параметры средства. Чтобы отобразить общую справку, выполните приведенные далее действия.

APPCMD /?

Первые несколько строк выходных данных:

General purpose IIS command line administration tool.
APPCMD (command) (object-type) <identifier> < /parameter1:value1 ... >

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

...

Справка по объектам

На экране справки по объекту отображаются команды, поддерживаемые определенным объектом. Чтобы отобразить справку по объектам, выполните приведенные далее действия.

APPCMD <OBJECT> /?

где <OBJECT> — один из поддерживаемых типов объектов. Например, эта командная строка будет отображать справку для объекта сайта:

APPCMD site /?

Справка по командам

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

APPCMD <COMMAND> <OBJECT> /?

Например, в этой командной строке будет отображаться справка для команды LIST объекта App:

APPCMD list app /?

Поиск объектов с помощью команды LIST

Команда 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)

По умолчанию каждый объект отображается в одной строке с указанием идентификатора объекта (например, "Веб-сайт по умолчанию") и одного или нескольких важных свойств (таких как идентификатор, привязки и состояние).

Перечисление определенного объекта

Команду LIST можно использовать для поиска экземпляра определенного именованного объекта с помощью командной строки в следующем формате:

APPCMD list <OBJECT> <ID>

Например, используйте эту командную строку, чтобы найти сайт с уникальным идентификатором "Веб-сайт по умолчанию":

%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

Управление объектами с помощью команд ADD, SET и DELETE

Помимо 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 /?

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

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

Команда SET задает одно или несколько свойств для указанного экземпляра объекта. Для выполнения этой команды требуется указать идентификатор объекта. Например, чтобы изменить свойство id веб-сайта по умолчанию, используйте следующую командную строку:

%systemroot%\system32\inetsrv\APPCMD set site "Default Web Site" /id:200

Используйте форму синтаксиса справки команды, чтобы узнать, какие свойства можно задать для определенного объекта. Например, чтобы просмотреть свойства, поддерживаемые веб-сайтом по умолчанию, используйте:

%systemroot%\system32\inetsrv\APPCMD set site "Default Web Site" /?

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

Команда DELETE удаляет экземпляр объекта . Как и SET, для этой команды также требуется указать идентификатор объекта. Например, используйте эту командную строку для удаления сайта MyNewSite:

%systemroot%\system32\inetsrv\APPCMD delete site "MyNewSite"

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

AppCmd позволяет создавать и восстанавливать резервные копии глобальной конфигурации сервера. Это можно использовать для восстановления после нежелательных изменений конфигурации сервера и возврата к известному состоянию сервера. Рекомендуется создать резервную копию перед изменением конфигурации сервера или установкой компонента, который изменяет ее. Каждая резервная копия содержит копию текущего файла ApplicationHost.config корневой конфигурации, а также другое связанное состояние на уровне сервера, включая конфигурацию FTP и конфигурацию средства администрирования IIS.

Чтобы создать резервную копию, используйте команду ADD объекта Backup:

%systemroot%\system32\inetsrv\APPCMD add backup
BACKUP object "20060519T172530" added

При этом создается резервная копия с автоматически созданным именем, представляющим дату и время резервного копирования.

Конкретное имя резервной копии можно указать следующим образом:

%systemroot%\system32\inetsrv\APPCMD add backup MyBackup
BACKUP object "MyBackup" added

Список доступных резервных копий можно отобразить с помощью команды LIST объекта Backup:

%systemroot%\system32\inetsrv\APPCMD list backups
BACKUP "20060519T172530"
BACKUP "MyBackup"

Наконец, чтобы восстановить резервную копию, используйте команду RESTORE с именем резервной копии:

%systemroot%\system32\inetsrv\APPCMD restore backup "MyBackup"
Restored configuration from backup "MyBackup"

Восстановление резервной копии останавливает сервер и восстанавливает состояние глобальной конфигурации на момент создания резервной копии.

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

Дополнительные сведения об управлении резервными копиями конфигурации с помощью AppCmd см. в разделе http://mvolo.com/most-important-appcmd-commands-backing-up-and-restoring-iis7-configuration/.

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

Создание сайтов, приложений и виртуальных каталогов и управление ими — это наиболее распространенные задачи, с которыми сталкиваются администраторы. В СЛУЖБАх IIS 7 и более поздних версий используется более строгая иерархия, чем в предыдущих версиях, которая работает следующим образом:

  1. Веб-сайт Веб-сайт получает запросы к определенным конечным точкам привязки, определенным IP-адресами и заголовками узла. Например, этот URL-адрес представляет веб-сайт, привязанный к порту 81: http://www.mysite.com:81.

    Веб-сайт содержит одно или несколько приложений.

  2. Приложения Приложение представлено виртуальным путем в пространстве имен URL-адреса веб-сайта. Например, приложение с виртуальным путем "/app1" может быть представлено следующим URL-адресом: http://www.mysite.com:81/app1.

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

    Приложение содержит один или несколько виртуальных каталогов.

  3. Виртуальный каталог Виртуальный каталог представлен его виртуальным путем в пространстве имен URL-адреса приложения. Например, виртуальный каталог с виртуальным путем "/vdir1" может быть представлен следующим URL-адресом: http://www.mysite.com:81/app1/vdir1.

    Виртуальный каталог сопоставляется с физическим расположением на диске.

Эта иерархия отличается от IIS 6.0, где веб-сайт может содержать набор виртуальных каталогов и приложений, а приложения — это просто специально помеченные виртуальные каталоги.

Пул приложений Пул приложений задает группу параметров для рабочих процессов, выполняющих обработку запросов для приложений в этом пуле приложений. Пулы приложений не являются частью иерархии site-app-vdir. Каждое приложение указывает, в каком пуле приложений оно будет выполняться или в пуле приложений по умолчанию. Пул приложений определяет ряд параметров рабочего процесса, таких как версия загруженной им среды CLR, режим интеграции .NET, учетная запись, под которой выполняется рабочий процесс, и параметры перезапуска процесса.

По умолчанию службы IIS 7 и более поздних версий устанавливаются с веб-сайтом с именем "Веб-сайт по умолчанию", который прослушивает порт 80 без ограничений ip-адреса и заголовков узла. У этого веб-сайта есть корневое приложение, а у этого приложения — корневой виртуальный каталог. Существует также пул приложений с именем DefaultAppPool, который по умолчанию используется всеми новыми приложениями.

В этой командной строке будут перечислены все сайты, включая веб-сайт по умолчанию:

%systemroot%\system32\inetsrv\APPCMD list sites
SITE "Default Web Site" (id:1,bindings:HTTP/*:80:,state:Started)

Давайте рассмотрим приложения, принадлежащие веб-сайту по умолчанию, указав свойство site.name при перечислении приложений:

%systemroot%\system32\inetsrv\APPCMD list apps /site.name:"Default Web Site"
APP "Default Web Site/" (applicationPool:DefaultAppPool)

Аналогичная команда выводит список виртуальных каталогов в приложении "Веб-сайт по умолчанию/", указав свойство app.name при перечислении Vdirs:

%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" с идентификатором сайта 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

Для создания веб-сайта необходимо указать параметры имени . Параметр id является необязательным и приведет к тому, что AppCmd создаст следующий доступный идентификатор сайта для нового сайта, если он опущен. Мы также указываем привязки и параметры physicalPath , которые описаны ниже. Вы также можете указать дополнительные свойства, чтобы задать их значения.

Свойство bindings использует формат protocol/bindingInformation, где bindingInformation является специфическим для протокола. Для HTTP он имеет формат 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 см. в статье Создание сайтов IIS7 и выше, приложений и виртуальных каталогов.

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

Ранее мы добавили новый веб-сайт с несколькими приложениями и виртуальными каталогами. Теперь мы будем использовать 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"
    managedPipelineMode:"Integrated"
    passAnonymousToken:"true"
    [processModel]
      identityType:"NetworkService"
      userName:""
      password:""
...
      pingingEnabled:"true"
...

Обратите внимание на количество свойств объекта пула приложений; Полные выходные данные здесь не отображаются.

Мы заинтересованы в изменении свойства managedRuntimeVersion на "v1.1", чтобы запускать приложения в этом пуле приложений с ASP.NET версии 1.1. Ниже приведена командная строка для этого.

%systemroot%\system32\inetsrv\APPCMD set apppool "MyAppPool" /managedRuntimeVersion:v1.1
APPPOOL object "MyAppPool" changed

Из приведенных выше выходных данных списка видно, что в объекте пула приложений доступно множество свойств, а некоторые свойства вложены во вложенный элемент конфигурации. Например, параметры процесса вложены под элементом processModel.

Если вы хотите задать вложенное свойство, обратитесь к нему с помощью нотации пути к элементу, как показано ниже:

%systemroot%\system32\inetsrv\APPCMD set apppool "MyAppPool" /processModel.pingingEnabled:false

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

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

Проверка состояния сервера

AppCmd предоставляет функциональные возможности для проверки различных аспектов состояния среды выполнения сервера, в том числе:

  • состояние сайта
  • Состояние пула приложений
  • активные рабочие процессы сервера
  • в настоящее время выполняет запросы

Кроме того, некоторые объекты предоставляют команды, позволяющие управлять состоянием среды выполнения, например команду STOP объекта Site и команду RECYCLE объекта AppPool.

Проверка состояния сайта и пула приложений

Состояние сайтов и пулов приложений передается из свойства состояния каждого объекта. При перечислении сайтов или пулов приложений состояние отображается в выходных данных по умолчанию. Пример:

%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 wps
WP "3577" (apppool:DefaultAppPool)

Каждый объект WP имеет свойство apppool.name , которое позволяет получить список всех запущенных рабочих процессов для определенного пула приложений:

%systemroot%\system32\inetsrv\APPCMD list wps /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-адреса, например для сайта, приложения или URL-адреса. Параметры конфигурации, заданные на более высоком уровне, наследуются всеми более низкими уровнями, если только они не переопределяются на более низких уровнях.

Чтобы отобразить эффективную конфигурацию для определенного уровня URL-адреса, используйте команду LIST объекта Config следующим образом:

%systemroot%\system32\inetsrv\APPCMD list config <URL> /section:SectionName

Где <URL> — это путь конфигурации, по которому должна считываться действующая конфигурация, например "Веб-сайт по умолчанию/" или "Веб-сайт по умолчанию/app1/hello.html". Если значение не указано, по умолчанию используется уровень сервера.

Дополнительные сведения об иерархии конфигурации IIS и о том, как создавать пути конфигурации IIS для использования с AppCmd и другими средствами, см. в статье Анатомия пути конфигурации IIS7 и выше.

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

%systemroot%\system32\inetsrv\APPCMD list config "Default Web Site/"

Чтобы получить список определенного раздела, используйте командную строку, как показано ниже:

%systemroot%\system32\inetsrv\APPCMD list config "Default Web Site/" /section:asp
<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 объекта Config. Синтаксис:

APPCMD set config <URL> /section:SectionName [ /property:value ]+

<URL> является необязательным; указывает, по какому пути конфигурации должно применяться изменение. Он опущен, изменения будут применяться на уровне сервера, которые наследуются всеми URL-адресами.

Параметр раздела является обязательным; указывает на редактируемый раздел.

Например, чтобы задать свойство appAllowClientDebug раздела ASP для http://localhost/app1 URL-адреса:

%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',...]

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

Например, чтобы задать свойство type в элементе коллекции со свойством key 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 файле конфигурации в корне сайта в наследуется всеми URL-адресами сайта.

По умолчанию AppCmd будет записывать конфигурацию на уровне, на котором она устанавливается. Например, если вы задаете конфигурацию для веб-сайта по умолчанию/, она будет записана в файл Web.config в корне этого сайта.

Однако можно написать конфигурацию на более высоком уровне и применить ее только к определенному подмножествию URL-адресов ниже с помощью конструкции расположения . Например, Web.config приложения может содержать конфигурацию, которая применяется только к одному каталогу в этом приложении. AppCmd предоставляет эту возможность с помощью параметра фиксации .

Для параметра commit можно задать одно из следующих значений:

  • (опущено) — значение по умолчанию; конфигурация записи на уровне, для которого она задана
  • URL-адрес — то же, что и по умолчанию; конфигурация записи на уровне, для которого она задана
  • site — запись конфигурации в Web.config в корне сайта URL-адреса, для которого она задана.
  • app — запись конфигурации в Web.config в корне приложения URL-адреса, для которого она задана.
  • apphost — запись конфигурации на уровне сервера в файл applicationHost.config.
  • <PATH> — запись конфигурации по указанному пути конфигурации

Например, эта командная строка отключает просмотр каталога для приложения и записывает эту конфигурацию в файл Web.config корневого каталога сайта:

%systemroot%\system32\inetsrv\APPCMD set config http://localhost/app1/ /section:directoryBrowse /enabled:false /commit:site

Дополнительные сведения о путях конфигурации IIS и управлении расположением конфигурации см. в статье Структура пути конфигурации IIS7 и выше.

Конфигурация блокировки и разблокировки

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

По умолчанию большинство разделов конфигурации IIS блокируются на уровне сервера. Чтобы настроить эти разделы на более низких уровнях, их необходимо разблокировать. AppCmd предоставляет команду UNLOCK для этой цели:

%systemroot%\system32\inetsrv\APPCMD unlock config /section:asp

Используйте команду LOCK, чтобы заблокировать раздел:

%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 предлагает различные режимы вывода, которые позволяют контролировать уровень детализации каждого объекта.

Выходные данные по умолчанию

Давайте возьмем список сайтов в качестве примера. По умолчанию 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) и идентификатора объекта ("Веб-сайт по умолчанию"). Несколько общих или важных свойств, как правило, также являются выходными (идентификатор, привязки и состояние для объекта Site).

Подробные выходные данные

Большинство объектов поддерживают значительно больше свойств, чем представлены в выходных данных по умолчанию. Чтобы отобразить все свойства объекта, укажите параметр text:*. Свойства каждого экземпляра будут отображаться в формате иерархического дерева:

APPCMD list site "Default Web Site" /text:*
SITE
  SITE.NAME: Default Web Site
  SITE.ID: 2
  bindings: http/*:80:
  state: Started
...

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

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

AppCmd предоставляет режим вывода, в котором отображается только определенное свойство каждого экземпляра объекта. Укажите имя свойства для отображения с параметром text:<PROPERTY> . Например, эта команда возвращает все доступные экземпляры виртуального каталога, отображая только свойство 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 является main примером этого и служит прямой оболочкой для системы конфигурации IIS. Каждый экземпляр объекта, возвращаемый объектом Config, является разделом конфигурации. Другие объекты, такие как Site, также содержат сведения о конфигурации в составе свойств объекта.

Если вы хотите отобразить сведения о конфигурации для возвращаемых объектов в необработанном формате 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 для объектов, возвращаемых при выполнении команды. Это обеспечивает некоторые интересные возможности, которые отличают AppCmd от любых предыдущих программ командной строки, предоставляемых командой IIS.

  • Создание сложных задач управления. Main целью этой возможности является включение результирующих наборов, созданных AppCmd, для ввода другой команды AppCmd. Это позволяет быстро выполнять сложные задачи управления без написания кода приложения.
  • Эффективное выполнение пакетных операций. Выполнение инструмента большое количество раз при выполнении большого количества операций (например, при создании 10 000 сайтов) может быть медленным из-за затрат на создание и инициализацию процесса для каждой операции. Вместо этого одна команда средства может выполняться над входными данными, содержащимися в наборе ДАННЫХ XML, что значительно сокращает время выполнения обработки входных данных.
  • Экспорт данных в другие средства. Формат XML позволяет использовать наборы данных, созданные AppCmd, с другими средствами для обработки, хранения или создания отчетов. Например, данные AppCmd можно использовать с преобразованиями XSLT в общие отчеты об управлении HTML, импортировать в SQL Server 2005 для дальнейшего анализа или загрузить с помощью ADO.NET для программной обработки.

Например, чтобы вывести список сайтов в режиме XML, выполните следующие действия:

%systemroot%\system32\inetsrv\APPCMD list sites /xml

Дополнительные сведения о функции конвейера и ее использовании для эффективного управления командной строкой см. в разделе http://mvolo.com/do-complex-iis-management-tasks-easily-with-appcmd-command-piping/.

Сводка

В этом обзоре мы ознакомились со всеми различными мощными командами, доступными с помощью служебной программы IIS 7 и более поздних версий Command-Line, AppCmd.exe.

Дополнительные разделы AppCmd и способы управления сервером можно найти из командной строки в моем блоге по адресу http://mvolo.com/category/appcmd/.