Introducción a AppCmd.exe

por Mike Volodarsky

Información general

AppCmd.exe es la herramienta de línea de comandos única para administrar IIS 7 y versiones posteriores. Expone toda la funcionalidad de administración de servidores clave a través de un conjunto de objetos de administración intuitivos que se pueden manipular desde la línea de comandos o desde scripts.

AppCmd permite controlar fácilmente el servidor sin usar una herramienta gráfica de administración y automatizar rápidamente las tareas de administración del servidor sin escribir código.

Algunas de las cosas que puede hacer con AppCmd:

  • Creación y configuración de sitios, aplicaciones, grupos de aplicaciones y directorios virtuales
  • Inicio y detención de sitios y reciclaje de grupos de aplicaciones
  • Enumerar los procesos de trabajo en ejecución y examinar las solicitudes que se están ejecutando actualmente
  • Búsqueda, manipulación, exportación e importación de IIS y configuración de ASP.NET

AppCmd también permite a los administradores del servidor crear tareas de administración avanzadas simplemente combinando varios comandos AppCmd.exe más sencillos o reutilizando la salida de la herramienta dentro de otro programa.

También puede encontrar más temas de AppCmd y aprender formas eficaces de administrar el servidor desde la línea de comandos en mi blog, en https://mvolo.com/category/appcmd/.

Cómo usar AppCmd.exe

La línea de comandos de AppCmd.exe se basa en un conjunto de objetos de administración de servidores de nivel superior, como Site y Application. Estos objetos exponen métodos que se pueden usar para realizar diversas acciones en esos objetos y las instancias de objeto exponen propiedades que se pueden inspeccionar y manipular.

Por ejemplo, el objeto Site proporciona métodos para enumerar, crear y eliminar instancias de sitio (estos son métodos estándar que están presentes en casi todos los objetos), así como para detener e iniciar sitios. Cada instancia de sitio a su vez contendrá propiedades, como el nombre del sitio y el identificador de sitio, que se pueden inspeccionar, buscar o establecer. La salida de cada comando siempre es una lista de instancias de objeto.

Nota:

AppCmd.exe se encuentra en el directorio %systemroot%\system32\inetsrv\. Dado que no forma parte de PATH automáticamente, debe usar la ruta de acceso completa al archivo ejecutable al ejecutar comandos como en %systemroot%\system32\inetsrv\AppCmd.exe list sites. Como alternativa, puede agregar manualmente el directorio inetsrv a la ruta de acceso de la máquina para que pueda acceder a AppCmd.exe directamente desde cualquier ubicación.

La herramienta funciona ejecutando un comando en uno de los objetos de administración admitidos, con parámetros opcionales usados para personalizar aún más el comportamiento del comando:

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

Donde <COMMAND> es uno de los comandos admitidos por <OBJECT>. La mayoría de los objetos admiten este conjunto básico de comandos:

  • LIST Muestra los objetos en la máquina. Un <Id.> opcional puede especificar un objeto único para enumerar o se pueden especificar uno o varios parámetros para que coincidan con las propiedades del objeto.
  • ADD Cree un nuevo objeto con las propiedades de objeto especificadas que se van a establecer durante la creación.
  • DELETE Elimine el objeto especificado por el <Id.>
  • SET Establece parámetros en el objeto especificado por <Id.>

Frecuentemente, un objeto admite comandos adicionales, como START y STOP para el objeto Site.

Por ejemplo, el conjunto actual de objetos disponibles a través de AppCmd es (donde <OBJECT> es uno de los objetos de administración admitidos por la herramienta):

Object Descripción
Sitio Administración de sitios virtuales
Aplicación Administración de aplicaciones
VDir Administración de directorios virtuales
Apppool Administración de grupos de aplicaciones
Configuración Administración de secciones de configuración general
Backup Administración de copias de seguridad de configuración del servidor
WP Administración de procesos de trabajo
Solicitar Visualización de solicitudes HTTP activas
Módulo Administración de módulos de servidor
Seguimiento Administración de registros de seguimiento del servidor

Donde <ID> es el identificador específico del objeto para la instancia de objeto que desea especificar para el comando. El formato del identificador es específico de cada tipo de objeto. Por ejemplo, el objeto Site usa el nombre del sitio, el objeto App usa la ruta de acceso de la aplicación y el objeto AppPool usó el nombre del grupo de aplicaciones.

Donde [ /parameter:value ]* es cero o más parámetros para el comando. Cada comando admite un conjunto diferente de parámetros, en función del objeto. Normalmente, los comandos que buscan objetos o manipulan propiedades de objeto permitirán especificar cualquiera de las propiedades del objeto como parámetro.

La propia herramienta también admite una serie de parámetros que afectan a la ejecución general del comando y no son específicos de ninguno de los objetos. Estos se muestran en la página de ayuda de nivel superior disponible en "AppCmd.exe /?", e incluyen parámetros como /text, /config y /xml para controlar la salida de la herramienta y /commit para controlar la ubicación de los cambios de configuración.

Obtener ayuda

AppCmd proporciona ayuda autodescripta que se puede usar como referencia para todos los objetos y comandos admitidos. Hay tres tipos de ayuda disponibles a medida que profundiza en la tarea que desea realizar.

Ayuda general

La pantalla de ayuda general muestra los objetos que admite la herramienta, así como los parámetros de aplicación general de la misma. Para mostrar ayuda general:

APPCMD /?

Las primeras líneas de salida son:

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              

...

Ayuda de objetos

La pantalla de ayuda del objeto muestra los comandos admitidos por un objeto específico. Para mostrar la ayuda del objeto:

APPCMD <OBJECT> /?

donde <OBJECT> es uno de los tipos de objeto admitidos. Por ejemplo, esta línea de comandos mostrará ayuda para el objeto de sitio:

APPCMD site /?

Ayuda del comando

La pantalla de ayuda del comando describe la sintaxis de un comando y un objeto específicos, incluidos los parámetros que admite y ejemplos de tareas comunes. Para mostrar la ayuda del comando:

APPCMD <COMMAND> <OBJECT> /?

Por ejemplo, esta línea de comandos mostrará ayuda para el comando LIST del objeto App:

APPCMD list app /?

Buscar objetos con el comando LIST

El comando LIST es el comando más versátil y es compatible con todos los objetos. El propósito de este comando es buscar instancias del objeto en función de los criterios especificados. La salida de este comando es una lista de instancias de objeto, que puede inspeccionar mediante la visualización de sus propiedades, la exportación para la nueva creación futura en otra máquina o el uso junto con otro comando para realizar acciones en ellos.

Listar todos los objetos

La manera más sencilla de usar el comando LIST es sin parámetros, que simplemente enumera todas las instancias conocidas del objeto:

APPCMD list <OBJECT>

Por ejemplo, para listar todos los sitios de la máquina, use esta línea de comandos:

%systemroot%\system32\inetsrv\APPCMD list sites

La salida debe ser similar a:

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)

De forma predeterminada, cada objeto se muestra en una sola línea, especificando su identificador específico del objeto (por ejemplo, "Sitio web predeterminado") y una o varias propiedades importantes (como identificador, enlaces y estado).

Listar un objeto específico

El comando LIST se puede usar para buscar una instancia de un objeto específico con nombre mediante una línea de comandos de este formulario:

APPCMD list <OBJECT> <ID>

Por ejemplo, use esta línea de comandos para buscar el sitio con un identificador único de "Sitio web predeterminado":

%systemroot%\system32\inetsrv\APPCMD list site "Default Web Site"

Listar objetos que satisfacen una consulta

Para buscar todas las instancias de objeto que coincidan con criterios concretos, especifique uno o varios parámetros que indiquen los valores de propiedad de los objetos que deben coincidir. Por ejemplo, use esta línea de comandos para buscar todos los sitios que están detenidos:

%systemroot%\system32\inetsrv\APPCMD list sites /state:Stopped

Puede especificar cualquier número de pares de valor de propiedad y la herramienta se asegurará de que los objetos devueltos cumplan todos los criterios especificados. Por ejemplo, use esta línea de comandos para buscar sitios que estén detenidos y configurados para que no se inicien automáticamente:

%systemroot%\system32\inetsrv\APPCMD list sites /serverAutoStart:false /state:Stopped

Manipular objetos con ADD, SET y DELETE

Además de LIST, la mayoría de los objetos también admiten comandos ADD, SET y DELETE.

Agregar nuevos objetos

El comando ADD crea una nueva instancia de un objeto. Por ejemplo, esta línea de comandos creará un nuevo sitio:

%systemroot%\system32\inetsrv\APPCMD add site /name:MyNewSite /bindings:"http/*:81:" /physicalPath:"C:\MyNewSite"

Según el objeto, se necesitarán algunos parámetros para establecer las propiedades necesarias en la nueva instancia y otras propiedades pueden ser opcionales. Si no se especifica un parámetro necesario, se devolverá un error.

La pantalla de ayuda del comando indica qué parámetros son necesarios. Por ejemplo, use esta línea de comandos para ver qué parámetros son necesarios para agregar un sitio:

%systemroot%\system32\inetsrv\APPCMD add site /?

Para obtener más información sobre cómo crear sitios, aplicaciones, directorios virtuales y grupos de aplicaciones con AppCmd.

Cambio de objetos existentes

El comando SET establece una o varias propiedades en una instancia de objeto especificada. Este comando requiere que se especifique el identificador específico del objeto. Por ejemplo, para cambiar la propiedad id del "Sitio web predeterminado", use esta línea de comandos:

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

Use un formulario de la sintaxis de ayuda del comando para ver qué propiedades se pueden establecer en un objeto determinado. Por ejemplo, para ver las propiedades admitidas por el uso del sitio web predeterminado:

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

Eliminar objetos

El comando DELETE elimina una instancia de un objeto. Al igual que SET, este comando también requiere que se especifique el identificador específico del objeto. Por ejemplo, use esta línea de comandos para eliminar el sitio denominado "MyNewSite":

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

Administrar copias de seguridad

AppCmd permite crear y restaurar copias de seguridad de la configuración global del servidor. Puede usarlo para recuperarse de cambios no deseados en la configuración del servidor y volver al estado de servidor correcto conocido. Es recomendable crear una copia de seguridad antes de cambiar la configuración del servidor o instalar un componente que lo cambie. Cada copia de seguridad contiene la copia del archivo de configuración raíz ApplicationHost.config actual, así como otro estado relacionado en todo el servidor, incluida la configuración de FTP y la configuración de la herramienta de administración de IIS.

Para crear una copia de seguridad, use el comando ADD del objeto Backup:

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

Esto creó una copia de seguridad con un nombre generado automáticamente que representa la fecha y hora de la copia de seguridad.

Se puede especificar un nombre específico para la copia de seguridad de la siguiente manera:

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

Puede mostrar una lista de copias de seguridad disponibles mediante el comando LIST del objeto Backup:

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

Por último, para restaurar una copia de seguridad, use el comando RESTORE con el nombre de la copia de seguridad:

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

Restaurar una copia de seguridad detiene el servidor y restaura la configuración global en su estado en el momento en que se creó la copia de seguridad.

En Windows Server® 2008 y Windows Vista SP1, AppCmd también podrá trabajar con copias de seguridad de configuración periódicas realizadas por el servicio de historial de configuración. Estas copias de seguridad se mostrarán en la lista AppCmd de las copias de seguridad y estarán disponibles para restaurar de la misma manera que las copias de seguridad que realizó manualmente a través de la herramienta.

Para más información sobre la administración de copias de seguridad de configuración con AppCmd, consulte http://mvolo.com/most-important-appcmd-commands-backing-up-and-restoring-iis7-configuration/.

Trabajar con sitios, aplicaciones, directorios virtuales y grupos de aplicaciones

La creación y administración de sitios, aplicaciones y directorios virtuales son las tareas más comunes a las que se enfrentan los administradores. IIS 7 y versiones posteriores usan una jerarquía de contención más estricta que las versiones anteriores que funcionan de esta manera:

  1. Sitio web Un sitio web recibe solicitudes en puntos de conexión de enlace concretos definidos por direcciones IP y encabezados de host. Por ejemplo, esta dirección URL representa un sitio web enlazado al puerto 81: http://www.mysite.com:81.

    Un sitio web contiene una o varias aplicaciones.

  2. Aplicación Una aplicación se representa mediante su ruta de acceso virtual dentro del espacio de nombres URL de un sitio web. Por ejemplo, una aplicación con una ruta de acceso virtual de "/app1" puede representarse mediante esta dirección URL: http://www.mysite.com:81/app1.

    Una aplicación pertenece a un grupo de aplicaciones.

    Una aplicación contiene uno o varios directorios virtuales.

  3. Directorio virtual Un directorio virtual se representa mediante su ruta de acceso virtual dentro del espacio de nombres URL de una aplicación. Por ejemplo, un directorio virtual con una ruta de acceso virtual de "/vdir1" puede representarse mediante esta dirección URL: http://www.mysite.com:81/app1/vdir1.

    Un directorio virtual se asigna a una ubicación física en el disco.

Esta jerarquía contrasta con IIS 6.0, donde un sitio web puede contener una mezcla de directorios virtuales y aplicaciones, y las aplicaciones son solo directorios virtuales especialmente marcados.

Grupo de aplicaciones Un grupo de aplicaciones especifica un grupo de opciones de configuración para los procesos de trabajo que realizan el procesamiento de solicitudes para las aplicaciones de ese grupo de aplicaciones. Los grupos de aplicaciones no forman parte de la jerarquía site-app-vdir. Cada aplicación especifica en qué grupo de aplicaciones se ejecutará o se ejecuta en el grupo de aplicaciones predeterminado. El grupo de aplicaciones define una serie de configuraciones de proceso de trabajo, como la versión de CLR cargada por él, el modo de integración de .NET, la cuenta con la que se ejecuta el proceso de trabajo y la configuración de reciclaje del proceso.

De forma predeterminada, IIS 7 y versiones posteriores se instalan con un sitio web denominado "Sitio web predeterminado" que escucha en el puerto 80 sin ninguna dirección IP ni restricciones de encabezado de host. Este sitio web tiene una aplicación raíz y esa aplicación tiene un directorio virtual raíz. También hay un grupo de aplicaciones denominado "DefaultAppPool", que se usa en todas las aplicaciones nuevas de forma predeterminada.

Esta línea de comandos mostrará una lista de todos los sitios, incluido el Sitio web predeterminado:

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

Examinemos las aplicaciones que pertenecen al Sitio web predeterminado especificando la propiedad site.name al listar Apps:

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

Un comando similar listará los directorios virtuales dentro de la aplicación "Sitio web predeterminado/" especificando la propiedad app.name al listar Vdirs:

%systemroot%\system32\inetsrv\APPCMD list vdirs /app.name:"Default Web Site/"
VDIR "Default Web Site/" (physicalPath:C:\inetpub\wwwroot)

Por último, vamos a examinar los grupos de aplicaciones:

%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)

Creación de sitios, aplicaciones, directorios virtuales y grupos de aplicaciones

Ahora, crearemos un nuevo sitio web denominado "MySite", con el id. de sitio 2 que escucha en el puerto 81 para todas las direcciones IP y los encabezados de host:

%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

Los parámetros de nombre deben especificarse para crear un sitio web. El parámetro id es opcional y hará que AppCmd genere el siguiente id. de sitio disponible para el nuevo sitio si se omite. También especificamos los enlaces y los parámetros physicalPath, que se explican a continuación. También puede especificar propiedades adicionales para establecer sus valores.

La propiedad enlaces usa el formato de protocol/bindingInformation, donde bindingInformation es específico del protocolo. Para HTTP, está en el formato IP:PORT:HOSTHEADER. Puede especificar varios enlaces mediante una coma para separar cada definición.

También especificamos una propiedad physicalPath para el sitio. Aunque un sitio web no tiene una ruta de acceso física, este formulario corto se usa para crear convenientemente un sitio web con una aplicación raíz y un directorio virtual raíz asignado a la ruta de acceso física especificada.

Si no especifica una ruta física, el sitio web se creará sin aplicaciones; será necesario crear explícitamente una aplicación y un directorio virtual para él.

Vamos a continuar y agreguemos otra aplicación al sitio web:

%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

Esto creó una nueva aplicación con la ruta de acceso virtual "/app1" que pertenece al sitio que hemos creado anteriormente, con un directorio virtual raíz que apunta a C:\inetpub\mysite\app1. El parámetro de ruta de acceso requerido especifica la ruta de acceso virtual de la nueva aplicación y el parámetro site.name necesario especifica el sitio al que pertenecerá la aplicación. El parámetro physicalPath opcional es un acceso directo, como en el caso del sitio, que crea un directorio virtual raíz junto con la aplicación.

Si no especifica el parámetro physicalPath o desea agregar otro directorio virtual a la aplicación, use una línea de comandos como esta:

%systemroot%\system32\inetsrv\APPCMD add vdir /app.name:"MySite/app1" /path:/vdir1 /physicalPath:C:\inetpub\mysite\app1\vdir1
VDIR object "MySite/app1/vdir1" added

Esto creó un nuevo directorio virtual con la ruta de acceso virtual "/vdir1" que pertenece a la aplicación creada anteriormente y apuntando a C:\inetpub\mysite\app1\vdir1. El parámetro de ruta de acceso requerido especifica la ruta de acceso virtual del nuevo directorio virtual y el parámetro app.name necesario especifica la aplicación a la que pertenecerá el directorio virtual. El parámetro physicalPath especifica la ubicación física del directorio virtual.

Por último, vamos a crear un nuevo grupo de aplicaciones:

%systemroot%\system32\inetsrv\APPCMD add apppool /name:MyAppPool
APPPOOL object "MyAppPool" added

Esto creó un nuevo grupo de aplicaciones denominado "MyAppPool".

Para obtener más información sobre sitios, aplicaciones y directorios virtuales en IIS 7 y versiones posteriores, y las opciones que tiene para crearlos con AppCmd, consulte Creación de IIS7 y directorios anteriores, aplicaciones y directorios virtuales.

Configuración de sitios, aplicaciones, directorios virtuales y grupos de aplicaciones

Anteriormente, agregamos un nuevo sitio web, completo con algunas aplicaciones y directorios virtuales. Ahora, usaremos AppCmd para modificar algunas de sus propiedades. Todos los objetos AppCmd admiten la misma sintaxis estándar para establecer propiedades:

APPCMD SET <OBJECT> <ID> [ /property:value ]*

En primer lugar, se mostrarán las aplicaciones disponibles en la máquina:

%systemroot%\system32\inetsrv\APPCMD list apps
APP "Default Web Site/" (applicationPool:DefaultAppPool)
APP "MySite/" (applicationPool:DefaultAppPool)
APP "MySite/app1" (applicationPool:DefaultAppPool)

Observe las dos aplicaciones que creamos anteriormente en el sitio web "MySite". Ambas aplicaciones se establecen para usar el grupo de aplicaciones DefaultAppPool. Vamos a cambiar la propiedad applicationPool de la aplicación raíz "MySite/" para usar el nuevo grupo de aplicaciones que creamos anteriormente denominado "MyAppPool":

%systemroot%\system32\inetsrv\APPCMD set app "MySite/" /applicationPool:MyAppPool
APP object "MySite/" changed

Esto cambió el valor de la propiedad applicationPool de la aplicación "MySite/" al nuevo valor, moviendo eficazmente la aplicación al nuevo grupo de aplicaciones.

La razón por la que hemos movido la aplicación al nuevo grupo de aplicaciones es que podemos cambiar algunos de los parámetros en tiempo de ejecución del proceso de trabajo en el que se ejecutará esta aplicación. Para ello, cambiaremos algunas de las propiedades del grupo de aplicaciones "MyAppPool". Antes de cambiar los valores de propiedad, suele ser útil mostrar primero las propiedades disponibles y sus valores actuales. Podemos hacerlo listando nuestra aplicación en la vista detallada:

%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"
...

Observe el número de propiedades en el objeto del grupo de aplicaciones; la salida completa no se muestra aquí.

Nos interesa cambiar la propiedad managedRuntimeVersion a "v1.1" para ejecutar nuestras aplicaciones en este grupo de aplicaciones con ASP.NET v1.1. Esta es la línea de comandos para hacerlo:

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

Puede ver en la salida lista anterior que hay numerosas propiedades disponibles en el objeto del grupo de aplicaciones y algunas de las propiedades están anidadas dentro de un sublemento de configuración. Por ejemplo, las opciones de proceso se anidan debajo del sub-elemento "processModel".

Si desea establecer una propiedad anidada, diríjase a ella con la notación de ruta de elemento de la siguiente manera:

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

Otros elementos de configuración

Además de manipular las propiedades de configuración con los objetos AppCmd de nivel superior, puede establecer propiedades de configuración en cualquier sección de configuración, incluidas las asociadas a los objetos AppCmd de nivel superior. Esto se trata más adelante en la sección denominada "Trabajar con configuración".

Inspección del estado del servidor

AppCmd proporciona funcionalidad para inspeccionar varios aspectos del estado en tiempo de ejecución del servidor, entre los que se incluyen:

  • estado del sitio
  • estado del grupo de aplicaciones
  • procesos de trabajo del servidor activo
  • actualmente en ejecución de solicitudes

Además, algunos objetos proporcionan comandos que permiten controlar su estado en tiempo de ejecución, como el comando STOP del objeto Site y el comando RECYCLE del objeto AppPool.

Inspección del estado del sitio y del grupo de aplicaciones

El estado de los sitios y grupos de aplicaciones se notifica desde la propiedad state de cada objeto. Al listar sitios o grupos de aplicaciones, el estado se muestra en la salida predeterminada. Por ejemplo:

%systemroot%\system32\inetsrv\APPCMD list apppools DefaultAppPool
APPPOOL "DefaultAppPool" (MgdVersion:v2.0,MgdMode:Integrated,state:Started)

La propiedad state también se puede usar para buscar sitios o grupos de aplicaciones que están en un estado específico. Por ejemplo, para buscar todos los grupos de aplicaciones iniciados:

%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)

Inspección de procesos de trabajo en ejecución

Puede usar el objeto WP (proceso de trabajo) para listar los procesos de trabajo en ejecución:

%systemroot%\system32\inetsrv\APPCMD list wps
WP "3577" (apppool:DefaultAppPool)

Cada objeto WP tiene una propiedad apppool.name, que permite listar todos los procesos de trabajo en ejecución para un grupo de aplicaciones determinado:

%systemroot%\system32\inetsrv\APPCMD list wps /apppool.name:DefaultAppPool
WP "3577" (apppool:DefaultAppPool)

Inspección de solicitudes que se están ejecutando actualmente

El objeto Request permite inspeccionar las solicitudes que se están ejecutando actualmente en el servidor:

%systemroot%\system32\inetsrv\APPCMD list requests
REQUEST "fb0000008000000e" (url:GET /wait.aspx?time=10000,time:4276 msec,client:localhost)

La lista se puede restringir a las solicitudes de un sitio determinado, un grupo de aplicaciones, un proceso de trabajo o una dirección URL mediante la propiedad adecuada para filtrar los resultados. Estos son algunos ejemplos:

%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

Trabajar con archivos de configuración

IIS 7 y versiones posteriores presentan un sistema de configuración jerárquico basado en XML similar al sistema de configuración de ASP.NET que almacena la configuración del servidor en secciones XML esquematizadas. La configuración se puede ubicar en el archivo ApplicationHost.config de nivel de servidor o colocarse en archivos de configuración web.config distribuidos dentro de la jerarquía de aplicaciones.

AppCmd permite una inspección completa y edición de la jerarquía de configuración desde la línea de comandos a través de su objeto Config. Además, AppCmd proporciona otras funciones útiles, como borrar la configuración, bloquearlo y desbloquearlo y buscarlo.

Visualización de la configuración

AppCmd funciona con la configuración en el nivel de las secciones de configuración. Cada sección de configuración normalmente describe una característica de servidor y puede contener uno o varios sub elementos y colecciones.

La configuración se puede establecer para un espacio de nombres URL arbitrario, como para un sitio, una aplicación o una dirección URL. Todos los niveles inferiores heredan los valores de configuración establecidos en un nivel superior, a menos que se invaliden específicamente en niveles inferiores.

Para mostrar la configuración efectiva para un nivel de URL determinado, use el comando LIST del objeto Config de la siguiente manera:

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

Donde <URL> es la ruta de acceso de configuración en la que se debe leer la configuración efectiva, como "Sitio web predeterminado/" o "Sitio web predeterminado Site/app1/hello.html". Si no se especifica, el valor predeterminado es el nivel de servidor.

Para más información sobre la jerarquía de configuración de IIS y cómo crear rutas de configuración de IIS para su uso con AppCmd y otras herramientas, consulte Anatomía de una ruta de acceso de configuración de IIS7 y superior.

El parámetro section especifica la sección de configuración que desea leer. Si no se especifica, se mostrarán todas las secciones de configuración vigentes en el nivel de dirección URL. Por ejemplo, esta línea de comandos muestra toda la configuración efectiva para la aplicación raíz del sitio web predeterminado:

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

Para listar una sección específica, use una línea de comandos como esta:

%systemroot%\system32\inetsrv\APPCMD list config "Default Web Site/" /section:asp
<system.webServer>
  <asp>
    <session />
    <comPlus />
    <cache />
    <limits />
</asp>
</system.webServer>

De forma predeterminada, AppCmd muestra solo la configuración que se establece explícitamente. Si desea mostrar la configuración efectiva, incluidos los valores heredados o predeterminados, especifique el parámetro /config:*:

%systemroot%\system32\inetsrv\APPCMD list config "Default Web Site/" /section:asp /config:*

Para mostrar una lista de las secciones de configuración disponibles, use esta línea de comandos:

%systemroot%\system32\inetsrv\APPCMD list config /section:?

Editar propiedades de configuración

En AppCmd, cada sección de configuración se expone como una instancia de un objeto de configuración que expone las propiedades que representan la sección de configuración subyacente. Use el comando SET del objeto Config para cambiar estas propiedades. La sintaxis es:

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

<URL> es opcional; especifica en qué ruta de configuración se debe aplicar el cambio. Se omite, los cambios se aplicarán en el nivel de servidor para que las hereden todas las direcciones URL.

El parámetro section es obligatorio; indica la sección que se está editando.

Por ejemplo, para establecer la propiedad appAllowClientDebug de la sección ASP de la URL http://localhost/app1:

%systemroot%\system32\inetsrv\APPCMD set config "http://localhost/app1" /section:asp /appAllowClientDebug:false
CONFIG object "asp" changed

Para establecer las propiedades de configuración anidadas dentro de los subelementos de la sección de configuración, use esta notación de ruta de acceso de elemento:

%systemroot%\system32\inetsrv\APPCMD set config "http://localhost/app1" /section:asp /limits.requestQueueMax:4000
CONFIG object "asp" changed

Especifique más de una propiedad en una sola línea de comandos para realizar varias modificaciones en la misma sección de configuración.

Para mostrar todas las propiedades que se pueden establecer en una sección de configuración determinada, use esta línea de comandos:

%systemroot%\system32\inetsrv\APPCMD set config /section:asp /?

Nota:

Tenga en cuenta que la sección asp está bloqueada de forma predeterminada, por lo que al ejecutar estos comandos se devolverá un error de infracción de bloqueo. Puede desbloquear primero esta sección, establecer la configuración en el nivel de servidor omitiendo <URL> o confirmarlos en la etiqueta de ubicación de nivel de servidor mediante /commit:apphost. Consulte el artículo sobre cómo controlar la ubicación de la configuración.

Edición de colecciones de configuración

AppCmd también proporciona compatibilidad con la edición de colecciones de configuraciones. Una colección de configuración puede contener varios elementos; por ejemplo, la sección de configuración system.webServer/modules contiene una lista de elementos de configuración de módulo que especifican los módulos ejecutados por el servidor.

Para establecer una propiedad en un elemento de colección, especifique el elemento de colección determinado que se va a editar mediante una expresión de indizador de colección dentro de la notación de ruta de acceso del elemento. La expresión del indizador de colección usa valores clave para identificar un elemento de colección específico. El indizador tiene el siguiente formato:

[key1='value1',key2='value2',...]

El número de claves necesarias para identificar de forma única un elemento depende de la colección. La mayoría de las colecciones solo requieren una clave.

Por ejemplo, para establecer la propiedad type en el elemento de colección con la propiedad key name igual a "FormsAuthentication", use esta línea de comandos:

%systemroot%\system32\inetsrv\APPCMD set config /section:system.webServer/modules /[name='FormsAuthentication'].type:System.Web.Security.FormsAuthenticationModule

Para agregar un nuevo elemento de colección, prefijo la notación de ruta de acceso del elemento con un signo más, +. Dentro de la expresión del indexador de colección, proporcione los valores de cada propiedad de clave. También se pueden incluir propiedades adicionales que no son clave dentro de la expresión del indizador de colección. Por ejemplo, esto agregará un nuevo elemento de colección de módulos:

%systemroot%\system32\inetsrv\APPCMD set config /section:system.webServer/modules /+[name='MyModule',type='MyType']

Para eliminar un elemento de colección, prefijo la notación de ruta de acceso del elemento con un signo menos, -:

%systemroot%\system32\inetsrv\APPCMD set config /section:system.webServer/modules /-[name='MyModule']

Controlar la ubicación de configuración

El sistema de configuración es jerárquico, lo que permite escribir las opciones de configuración en varios niveles, desde el archivo ApplicationHost.config de nivel de servidor hasta los archivos Web.config distribuidos que pueden estar presentes en los niveles de sitio, aplicación o directorio virtual.

Cuando la configuración se escribe en un nivel determinado, todas las direcciones URL de ese nivel y las versiones inferiores heredan. Por ejemplo, la configuración establecida en el archivo de configuración Web.config en la raíz del sitio heredado por todas las direcciones URL del sitio.

De forma predeterminada, AppCmd escribirá la configuración en el nivel en el que se establece. Por ejemplo, si establece la configuración para el "Sitio web predeterminado/", se escribirá en un archivo Web.config en la raíz de ese sitio.

Sin embargo, es posible escribir la configuración en un nivel superior y solo aplicarla a un subconjunto determinado de direcciones URL a continuación mediante una construcción de ubicación. Por ejemplo, la aplicación Web.config puede contener la configuración que se aplica a un único directorio dentro de esa aplicación. AppCmd proporciona esta funcionalidad a través de su parámetro commit.

El parámetro commit se puede establecer en uno de los siguientes elementos:

  • (omitido) — valor predeterminado; escritura de la configuración en el nivel para el que se establece
  • url: igual que el valor predeterminado; escriba la configuración en el nivel para el que se establece
  • site: escriba la configuración en Web.config en la raíz del sitio de la dirección URL para la que se establece
  • app: escriba la configuración en Web.config en la raíz de la aplicación de la dirección URL para la que se establece
  • apphost: escriba la configuración en el nivel de servidor, en el archivo applicationHost.config
  • <PATH>: configuración de escritura en la ruta de acceso de configuración especificada

Por ejemplo, esta línea de comandos desactiva el examen de directorios para una aplicación y escribe esa configuración en el archivo Web.config de la raíz del sitio:

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

Para obtener más información sobre las rutas de configuración de IIS y controlar la ubicación de la configuración, consulte Anatomía de IIS7 y la ruta de acceso de configuración anterior.

Configuración de bloqueo y desbloqueo

El sistema de configuración permite bloquear secciones de configuración en un nivel determinado, lo que impide que sus propiedades se invaliden en niveles inferiores. Esto se puede usar para evitar que las aplicaciones cambien la configuración que el administrador del servidor desea aplicar.

De forma predeterminada, la mayoría de las secciones de configuración de IIS están bloqueadas en el nivel de servidor. Para configurar estas secciones en niveles inferiores, deben desbloquearse. AppCmd proporciona el comando UNLOCK para este propósito:

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

Use el comando LOCK para bloquear una sección:

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

Tenga en cuenta que si bloquea una sección de configuración, todas las aplicaciones que ya hayan configurado esa sección en un nivel inferior experimentarán un error de infracción de bloqueo cuando intenten acceder a la sección de configuración.

Buscar configuración

AppCmd puede buscar en la jerarquía de configuración distribuida todas las ubicaciones que establecen propiedades de configuración o valores de propiedad concretos. La característica de búsqueda de configuración se puede usar para identificar ubicaciones en las que se habilita una característica determinada o para asegurar el cumplimiento de un requisito de configuración determinado.

Para buscar en el servidor todas las ubicaciones que definen la configuración, puede usar el comando SEARCH sin argumentos:

%systemroot%\system32\inetsrv\APPCMD search config

Para buscar todas las ubicaciones en una ruta de acceso de configuración determinada, como todas las ubicaciones de configuración de un sitio determinado, incluya la ruta de acceso en la línea de comandos:

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

Para buscar ubicaciones que configuren una sección de configuración determinada:

%systemroot%\system32\inetsrv\APPCMD search config "Default Web Site/" /section:directoryBrowse

Para buscar ubicaciones que establezcan una propiedad determinada, incluya el nombre de la propiedad:

%systemroot%\system32\inetsrv\APPCMD search config "Default Web Site/" /section:directoryBrowse /enabled

Y, por último, para buscar ubicaciones que establezcan una propiedad en un valor específico:

%systemroot%\system32\inetsrv\APPCMD search config "Default Web Site/" /section:directoryBrowse /enabled:true

Trabajar con la salida de la herramienta

Anteriormente, mencionamos que la salida del comando LIST es una lista de instancias de objeto. AppCmd ofrece diferentes modos de salida que permiten controlar el nivel de detalle mostrado sobre cada objeto.

Salida predeterminada

Tomemos como ejemplo los sitios LIST. De forma predeterminada, AppCmd usa un formato de salida compacto:

%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)

En este formato de salida, cada instancia de objeto está en una línea, especificando el tipo de objeto (SITE) y el identificador del objeto ("Sitio web predeterminado"). Por lo general, varias propiedades comunes o importantes también son salidas (id., enlaces y estado para el objeto Site).

Salida detallada

La mayoría de los objetos admiten significativamente más propiedades de las que se presentan en la salida predeterminada. Para mostrar todas las propiedades del objeto, especifique el parámetro text:*. Las propiedades de cada instancia se mostrarán en un formato de árbol jerárquico:

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

En el ejemplo anterior, la salida se ha abreviado: la salida real incluye muchas más propiedades.

Salida para trabajar con otras herramientas de línea de comandos

AppCmd proporciona un modo de salida que muestra solo una propiedad específica de cada instancia de objeto. Especifique el nombre de la propiedad que se va a mostrar con el parámetro text:<PROPERTY>. Por ejemplo, este comando devolverá todas las instancias de directorio virtual disponibles, mostrando solo la propiedad physicalPath de cada una:

%systemroot%\system32\inetsrv\APPCMD list vdirs /text:physicalPath
C:\inetpub\wwwroot
C:\inetpub\vdir1
D:\vdir2

Por supuesto, puede mostrar cualquiera de las propiedades válidas del tipo de objeto que se muestra.

A veces es conveniente usar la salida de AppCmd con las herramientas de línea de comandos y comandos de shell existentes, como el comando FOR y FINDSTR.EXE. Estas herramientas suelen funcionar mejor cuando cada elemento de datos de interés se encuentra en una línea independiente.

Por ejemplo, imagine una línea de comandos que genera una lista de directorios de cada directorio virtual de IIS. La línea de comandos debe adquirir una lista de rutas de acceso físicas de cada uno de los directorios virtuales de interés y luego ejecutar un comando DIR en cada una de esas rutas de acceso mediante el comando FOR para recorrer en bucle a través de ellos:

FOR /F %f IN ('%systemroot%\system32\inetsrv\APPCMD list vdir /text:physicalPath') DO CALL DIR %f

Salida de configuración

Muchos de los objetos contienen datos de configuración que proceden directamente de las secciones de configuración asociadas. El objeto Config es el ejemplo principal de eso y actúa como contenedor directo sobre el sistema de configuración de IIS, cada instancia de objeto devuelta por el objeto Config es una sección de configuración. Otros objetos, como Site, también contienen información de configuración como parte de las propiedades del objeto.

Si desea mostrar la información de configuración de los objetos devueltos en el formato XML sin formato del sistema de configuración, puede usar el parámetro config. Por ejemplo, para mostrar la información de configuración XML del objeto de sitio, use una línea de comandos como esta:

%systemroot%\system32\inetsrv\APPCMD list site "Default Web Site" /config
<site name="Default Web Site" id="1">
  <bindings>
        <binding protocol="HTTP" bindingInformation="*:80:" />
...

XML Output

La herramienta también admite su propio formato de salida XML, que genera conjuntos de resultados XML bien formados para los objetos devueltos desde la ejecución del comando. Esto permite algunas funcionalidades interesantes que distinguen AppCmd de las herramientas de línea de comandos anteriores proporcionadas por el equipo de IIS.

  • Creación de tareas de administración complejas. El objetivo principal de esta función es permitir que los conjuntos de resultados generados por AppCmd se escriban en otro comando AppCmd. Esto le permite ejecutar rápidamente tareas de administración complejas sin escribir código de aplicación.
  • Realización eficaz de operaciones por lotes. Ejecutar la herramienta un gran número de veces al realizar un gran número de operaciones (por ejemplo, crear 10 000 sitios) puede ser lento debido a la sobrecarga de creación e inicialización de procesos para cada operación. En su lugar, un único comando de la herramienta puede ejecutarse sobre los datos de entrada contenidos en un conjunto de datos XML, lo que reduce drásticamente el tiempo de ejecución del procesamiento de los datos de entrada.
  • Exportar datos a otras herramientas. El formato XML permite que los conjuntos de datos generados por AppCmd se usen con otras herramientas para procesar, almacenar o proporcionar informes. Por ejemplo, los datos de AppCmd pueden usarse con transformaciones XSLT para generar informes de gestión HTML generales, importarse a SQL Server 2005 para su posterior análisis o cargarse mediante ADO.NET para su procesamiento programático.

Por ejemplo, para generar la lista de sitios en modo XML:

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

Para obtener más información sobre la característica de canalización y cómo aprovecharla para una administración eficaz de la línea de comandos, consulte http://mvolo.com/do-complex-iis-management-tasks-easily-with-appcmd-command-piping/.

Resumen

En esta introducción, le familiarizamos con todos los diferentes comandos eficaces disponibles mediante la utilidad IIS 7 y superior línea de comandos, AppCmd.exe.

También puede encontrar más temas de AppCmd y aprender formas eficaces de administrar el servidor desde la línea de comandos en mi blog, en http://mvolo.com/category/appcmd/.