Share via


Bien démarrer avec AppCmd.exe

par Mike Volodarsky

Vue d’ensemble

AppCmd.exe est l’outil en ligne de commande unique permettant de gérer IIS 7 et les versions ultérieures. Il expose toutes les fonctionnalités de gestion de serveur clés par le biais d’un ensemble d’objets de gestion intuitifs qui peuvent être manipulés à partir de la ligne de commande ou à partir de scripts.

AppCmd vous permet de contrôler facilement le serveur sans utiliser d’outil d’administration graphique et d’automatiser rapidement les tâches de gestion de serveur sans écrire de code.

Voici quelques-unes des opérations que vous pouvez effectuer avec AppCmd :

  • Créer et configurer des sites, des applications, des pools d’applications et des répertoires virtuels
  • Démarrer et arrêter des sites et recycler des pools d’applications
  • Répertorier les processus de travail en cours d’exécution et examiner les demandes en cours d’exécution
  • Rechercher, manipuler, exporter et importer la configuration IIS et ASP.NET

AppCmd permet également aux administrateurs de serveur de créer des tâches de gestion avancées en combinant plusieurs commandes AppCmd.exe plus simples ou en réutilisant la sortie de l’outil à l’intérieur d’un autre programme.

Vous pouvez également trouver d’autres rubriques AppCmd et découvrir de puissantes façons de gérer votre serveur à partir de la ligne de commande sur mon blog, à l’adresse https://mvolo.com/category/appcmd/.

Comment utiliser AppCmd.exe

La ligne de commande AppCmd.exe repose sur un ensemble d’objets de gestion de serveur de niveau supérieur, tels que Site et Application. Ces objets exposent des méthodes qui peuvent être utilisées pour effectuer différentes actions sur ces objets, et les instances d’objet exposent des propriétés qui peuvent être inspectées et manipulées.

Par exemple, l’objet Site fournit des méthodes pour répertorier, créer et supprimer des instances de site (il s’agit de méthodes standard présentes sur presque tous les objets), ainsi que des sites d’arrêt et de démarrage. Chaque instance de site contient à son tour des propriétés, telles que le nom du site et l’ID de site, qui peuvent être inspectées, recherchées ou définies. La sortie de chaque commande est toujours une liste d’instances d’objet.

Remarque

AppCmd.exe se trouve dans le répertoire %systemroot%\system32\inetsrv\. Étant donné qu’il ne fait pas automatiquement partie du PATH, vous devez utiliser le chemin d’accès complet à l’exécutable lors de l’exécution de commandes comme dans %systemroot%\system32\inetsrv\AppCmd.exe list sites. Vous pouvez également ajouter manuellement le répertoire inetsrv au chemin d’accès de votre ordinateur afin de pouvoir accéder à AppCmd.exe directement à partir de n’importe quel emplacement.

L’outil fonctionne en exécutant une commande sur l’un des objets de gestion pris en charge, avec des paramètres facultatifs utilisés pour personnaliser davantage le comportement de la commande :

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

<COMMAND> est l’une des commandes prises en charge par <OBJECT>. La plupart des objets prennent en charge cet ensemble de commandes de base :

  • LIST Affiche les objets sur l’ordinateur. Un <ID> facultatif peut spécifier un objet unique à répertorier, ou un ou plusieurs paramètres peuvent être spécifiés pour correspondre aux propriétés d’objet.
  • ADD Créé un objet avec les propriétés d’objet spécifiées à définir lors de la création.
  • DELETE Supprime l’objet spécifié par l’<ID>.
  • SET Défini les paramètres sur l’objet spécifié par l’<ID>.

Un objet prend souvent en charge des commandes supplémentaires, telles que START et STOP pour l’objet Site.

Par exemple, l’ensemble actuel d’objets disponibles via AppCmd est (où <OBJECT> est l’un des objets de gestion pris en charge par l’outil) :

Object Description
Site Administration des sites virtuels
Application Administration des applications
VDir Administration des répertoires virtuels
Apppool Administration des pools d’applications
Config Administration des sections de configuration générale
Sauvegarde Gestion des sauvegardes de configuration de serveur
WP Administration des processus de travail
Requête Affichage des requêtes HTTP actives
Module Administration des modules serveur
Suivi Gestion des journaux de suivi du serveur

<ID> est l’identificateur spécifique à l’objet de l’instance d’objet que vous souhaitez spécifier pour la commande. Le format de l’identificateur est spécifique à chaque type d’objet. Par exemple, l’objet Site utilise le nom du site, l’objet App utilise le chemin d’accès de l’application et l’objet AppPool a utilisé le nom du pool d’applications.

[ /parameter:value ]* est aucun ou plusieurs paramètres pour la commande. Chaque commande prend en charge un ensemble différent de paramètres, en fonction de l’objet. En règle générale, les commandes qui recherchent des objets ou manipulent des propriétés d’objet permettent à l’une des propriétés de l’objet d’être spécifiées en tant que paramètre.

L’outil lui-même prend également en charge un certain nombre de paramètres qui affectent l’exécution de la commande générale et qui ne sont pas spécifiques à l’un des objets. Ils sont répertoriés dans la page d’aide de niveau supérieur disponible à partir de « AppCmd.exe /? », et incluent des paramètres tels que /text, /configet /xml pour contrôler la sortie de l’outil et /commit pour contrôler l’emplacement des modifications de configuration.

Obtenir de l’aide

AppCmd fournit une aide auto-décrivant qui peut être utilisée comme référence pour tous les objets et commandes pris en charge. Il existe trois types d’aide disponibles lorsque vous explorez la tâche que vous souhaitez effectuer.

Aide générale

L’écran d’aide général affiche les objets pris en charge par l’outil, ainsi que les paramètres d’outil généralement applicables. Pour afficher l’aide générale :

APPCMD /?

Les premières lignes de sortie sont les suivantes :

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              

...

Aide sur l’objet

L’écran d’aide sur l’objet affiche les commandes prises en charge par un objet spécifique. Pour afficher l’aide de l’objet :

APPCMD <OBJECT> /?

<OBJECT> est l’un des types d’objets pris en charge. Par exemple, cette ligne de commande affiche de l’aide pour l’objet de site :

APPCMD site /?

Aide sur les commandes

L’écran d’aide sur les commandes décrit la syntaxe d’une commande et d’un objet spécifique, y compris les paramètres qu’il prend en charge et des exemples de tâches courantes. Pour afficher l’aide de la commande :

APPCMD <COMMAND> <OBJECT> /?

Par exemple, cette ligne de commande affiche de l’aide pour la commande LIST de l’objet App :

APPCMD list app /?

Recherche d’objets avec la commande LIST

La commande LIST est la commande la plus polyvalente et est prise en charge par tous les objets. L’objectif de cette commande est de rechercher des instances de l’objet en fonction des critères que vous spécifiez. La sortie de cette commande est une liste d’instances d’objet, que vous pouvez inspecter en consultant leurs propriétés, exporter pour les recréer sur un autre ordinateur ou utiliser avec une autre commande pour effectuer des actions sur ces instances.

Liste de tous les objets

La façon la plus simple d’utiliser la commande LIST est sans paramètre, ce qui permet de répertorier toutes les instances connues de l'objet :

APPCMD list <OBJECT>

Par exemple, pour répertorier tous les sites sur l’ordinateur, utilisez cette ligne de commande :

%systemroot%\system32\inetsrv\APPCMD list sites

La sortie doit ressembler à ceci :

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)

Par défaut, chaque objet est affiché sur une seule ligne, en spécifiant son identificateur spécifique à l’objet (par exemple, « Site web par défaut ») et une ou plusieurs propriétés importantes (telles que l’ID, les liaisons et l’état).

Liste d’un objet spécifique

La commande LIST peut être utilisée pour rechercher une instance d’un objet nommé spécifique à l’aide d’une ligne de commande dans ce formulaire :

APPCMD list <OBJECT> <ID>

Par exemple, utilisez cette ligne de commande pour rechercher le site avec un ID unique de « Site web par défaut » :

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

Liste d’objets qui répondent à une requête

Pour rechercher toutes les instances d’objet qui correspondent à des critères particuliers, spécifiez un ou plusieurs paramètres qui indiquent les valeurs de propriété des objets à mettre en correspondance. Par exemple, utilisez cette ligne de commande pour rechercher tous les sites arrêtés :

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

Vous pouvez spécifier n’importe quel nombre de paires propriété-valeur, et l’outil s’assure que les objets retournés répondent à tous les critères spécifiés. Par exemple, utilisez cette ligne de commande pour rechercher les sites qui sont arrêtés et configurés pour ne pas démarrer automatiquement :

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

Manipulation d’objets avec ADD, SET et DELETE

Outre LIST, la plupart des objets prennent également en charge les commandes ADD, SET et DELETE.

Ajout de nouveaux objets

La commande ADD crée une instance d’un objet. Par exemple, cette ligne de commande crée un Site :

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

Selon l’objet, certains paramètres sont requis pour définir les propriétés requises sur la nouvelle instance, et d’autres propriétés peuvent être facultatives. Une erreur est retournée si un paramètre obligatoire n’est pas spécifié.

L’écran d’aide sur les commandes indique quels paramètres sont requis. Par exemple, utilisez cette ligne de commande pour voir quels paramètres sont requis pour ajouter un Site :

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

Pour plus d’informations sur la création de sites, d’applications, de répertoires virtuels et de pools d’applications avec AppCmd, lisez la suite.

Modification d’objets existants

La commande SET définit une ou plusieurs propriétés sur une instance d’objet spécifiée. Cette commande nécessite que l’identificateur spécifique à l’objet soit spécifié. Par exemple, pour modifier la propriété ID du « Site web par défaut », utilisez cette ligne de commande :

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

Utilisez une forme de la syntaxe d’aide sur les commandes pour voir quelles propriétés peuvent être définies sur un objet particulier. Par exemple, pour afficher les propriétés prises en charge par le Site web par défaut, utilisez :

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

Suppression d'objets

La commande DELETE supprime une instance d’un objet. Comme SET, cette commande nécessite également que l’identificateur spécifique à l’objet soit spécifié. Par exemple, utilisez cette ligne de commande pour supprimer le site nommé « MyNewSite » :

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

Gestion des sauvegardes

AppCmd vous permet de créer et de restaurer des sauvegardes de la configuration globale du serveur. Vous pouvez l’utiliser pour récupérer des modifications indésirables apportées à la configuration du serveur et revenir à un état de bon fonctionnement connu du serveur. Il est judicieux de créer une sauvegarde avant de modifier la configuration du serveur ou d’installer un composant qui le modifie. Chaque sauvegarde contient la copie du fichier de configuration racine ApplicationHost.config actuel, ainsi que d’autres états associés au niveau du serveur, notamment la configuration FTP et la configuration de l’outil d’administration IIS.

Pour créer une sauvegarde, utilisez la commande ADD de l’objet Sauvegarde :

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

Cela crée une sauvegarde avec un nom généré automatiquement qui représente la date et l’heure de la sauvegarde.

Un nom spécifique pour la sauvegarde peut être spécifié comme suit :

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

Vous pouvez afficher la liste des sauvegardes disponibles à l’aide de la commande LIST de l’objet Sauvegarde :

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

Enfin, pour restaurer une sauvegarde, utilisez la commande RESTORE avec le nom de la sauvegarde :

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

La restauration d’une sauvegarde arrête le serveur et restaure la configuration globale à son état au moment de la création de la sauvegarde.

Dans Windows Server® 2008 et Windows Vista SP1, AppCmd sera également capable d’utiliser des sauvegardes de configuration périodiques effectuées par le service d’historique de configuration. Ces sauvegardes s’affichent dans la liste AppCmd des sauvegardes et peuvent être restaurées de la même manière que les sauvegardes que vous avez effectuées manuellement à l’aide de l’outil.

Pour en savoir plus sur la gestion des sauvegardes de configuration avec AppCmd, consultez http://mvolo.com/most-important-appcmd-commands-backing-up-and-restoring-iis7-configuration/.

Utilisation de sites, d’applications, de répertoires virtuels et de pools d’applications

La création et la gestion de sites, d’applications et de répertoires virtuels sont les tâches les plus courantes auxquelles sont confrontés les administrateurs. IIS 7 et les versions ultérieures utilisent une hiérarchie de confinement plus stricte que les versions précédentes qui fonctionnent comme suit :

  1. Site web Un site web reçoit des demandes sur des points de terminaison de liaison spécifiques définis par les adresses IP et les en-têtes d’hôte. Par exemple, cette URL représente un site web lié au port 81 : http://www.mysite.com:81.

    Un site web contient une ou plusieurs applications.

  2. Application Une application est représentée par son chemin d’accès virtuel dans l’espace de noms URL d’un site web. Par exemple, une application avec un chemin d’accès virtuel de « /app1 » peut être représentée par cette URL : http://www.mysite.com:81/app1.

    Une application appartient à un pool d’applications.

    Une application contient un ou plusieurs répertoires virtuels.

  3. Répertoire virtuel Un répertoire virtuel est représenté par son chemin d’accès virtuel dans l’espace de noms d’URL d’une application. Par exemple, un répertoire virtuel avec un chemin d’accès virtuel de « /vdir1 » peut être représenté par cette URL : http://www.mysite.com:81/app1/vdir1.

    Un répertoire virtuel est mappé à un emplacement physique sur le disque.

Cette hiérarchie diffère d’IIS 6.0 où un site Web peut contenir un mélange de répertoires et d’applications virtuels, et les applications sont simplement marquées spécialement pour les répertoires virtuels.

Pool d’applications Un pool d’applications spécifie un groupe de paramètres pour les processus de travail qui effectuent le traitement des demandes pour les applications de ce pool d’applications. Les pools d’applications ne font pas partie de la hiérarchie site-app-vdir. Chaque application spécifie le pool d’applications dans lequel elle s’exécute ou elle s’exécute dans le pool d’applications par défaut. Le pool d’applications définit un certain nombre de paramètres de processus de travail, tels que la version du CLR chargé par celui-ci, le mode d’intégration .NET, le compte sous lequel le processus de travail s’exécute et les paramètres de recyclage des processus.

Par défaut, IIS 7 et les versions ultérieures sont installés avec un site web nommé « Site web par défaut » qui écoute sur le port 80 sans adresse IP ni restrictions d’en-tête de l’hôte. Ce site web a une application racine et cette application a un répertoire virtuel racine. Il existe également un pool d’applications nommé « DefaultAppPool » qui est utilisé par toutes les nouvelles applications par défaut.

Cette ligne de commande répertorie tous les Sites, y compris le Site web par défaut :

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

Examinons les applications qui appartiennent au Site web par défaut en spécifiant la propriété site.name lors de la liste d’Applications :

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

Une commande similaire répertorie les répertoires virtuels à l’intérieur de l’application « Site web par défaut/ » en spécifiant la propriété app.name lors de la liste de Vdirs :

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

Enfin, examinons les pools d’applications :

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

Création de sites, d’applications, de répertoires virtuels et de pools d’applications

À présent, nous allons créer un site web nommé « MySite », avec un ID de site de 2 qui écoute sur le port 81 pour toutes les adresses IP et en-têtes d’hôte :

%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

Les paramètres nom doivent être spécifiés pour créer un site web. Le paramètre ID est facultatif et, s’il est omis, AppCmd génère le prochain identifiant de site disponible pour le nouveau site. Nous spécifions également les paramètres liaisons et physicalPath, qui sont expliqués ci-dessous. Vous pouvez également spécifier des propriétés supplémentaires pour définir leurs valeurs.

La propriété liaisons utilise le format de protocol/bindingInformation, où bindingInformation est spécifique au protocole. Pour HTTP, il est au format IP:PORT:HOSTHEADER. Vous pouvez spécifier plusieurs liaisons en utilisant une virgule pour séparer chaque définition.

Nous avons également spécifié une propriété physicalPath pour le site. Bien qu’un site web lui-même n’ait pas de chemin d’accès physique, ce court formulaire est utilisé pour créer facilement un site web avec une application racine et un répertoire virtuel racine mappé au chemin physique spécifié.

Si vous ne spécifiez pas de chemin d’accès physique, le site web sera créé sans applications ; une application et un répertoire virtuel doivent être créés explicitement.

Allons-y et ajoutons une autre application au site 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

Cela crée une application avec le chemin d’accès virtuel « /app1 » appartenant au site que nous avons créé ci-dessus, avec un répertoire virtuel racine pointant vers C:\inetpub\mysite\app1. Le paramètre chemin d’accès requis spécifie le chemin d’accès virtuel de la nouvelle application, et le paramètre site.name requis spécifie le site auquel l’application appartiendra. Le paramètre physicalPath facultatif est un raccourci, comme dans le cas du site, qui crée un répertoire virtuel racine avec l’application.

Si vous ne spécifiez pas le paramètre physicalPath ou si vous souhaitez ajouter un autre répertoire virtuel à l’application, utilisez une ligne de commande comme suit :

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

Cela crée un répertoire virtuel avec le chemin d’accès virtuel « /vdir1 » appartenant à l’application que nous avons créée ci-dessus et pointant vers C:\inetpub\mysite\app1\vdir1. Le paramètre chemin d’accès requis spécifie le chemin d’accès virtuel du nouveau répertoire virtuel, et le paramètre app.name requis spécifie l’application à laquelle appartiendra le répertoire virtuel. Le paramètre physicalPath spécifie l’emplacement physique du répertoire virtuel.

Enfin, nous allons créer un pool d’applications :

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

Cela crée un pool d’applications nommé « MyAppPool ».

Pour en savoir plus sur les sites, applications et répertoires virtuels dans IIS 7 et les versions ultérieures, et sur les options dont vous disposez pour les créer avec AppCmd, consultez Création de sites, d'applications et de répertoires virtuels dans IIS 7 et les versions supérieures.

Configuration de sites, d’applications, de répertoires virtuels et de pools d’applications

Précédemment, nous avons ajouté un nouveau site web, avec quelques applications et répertoires virtuels. À présent, nous allons utiliser AppCmd pour modifier certaines de leurs propriétés. Tous les objets AppCmd prennent en charge la même syntaxe standard pour définir des propriétés :

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

Tout d’abord, affichons les applications disponibles sur l’ordinateur :

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

Notez les deux applications que nous avons créées précédemment sous le site web « MySite ». Ces deux applications sont définies pour utiliser le pool d’applications DefaultAppPool. Modifions la propriété applicationPool de l’application racine « MySite/ » pour qu’elle utilise le nouveau pool d’applications que nous avons créé précédemment nommé « MyAppPool » :

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

Cela a changé la valeur de la propriété applicationPool de l’application « MySite/ » par la nouvelle valeur, en déplaçant efficacement l’application vers le nouveau pool d’applications.

La raison pour laquelle nous avons déplacé l’application vers le nouveau pool d’applications est que nous pouvons modifier certains des paramètres d’exécution du processus de travail au sein duquel cette application s’exécutera. Pour ce faire, nous allons modifier certaines des propriétés du pool d’applications « MyAppPool ». Avant de modifier les valeurs des propriétés, il est souvent utile d’afficher d’abord les propriétés disponibles et leurs valeurs actuelles. Nous pouvons faire cela en listant notre application en mode détaillé :

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

Notez le nombre de propriétés sur l’objet pool d’applications ; la sortie complète n’est pas affichée ici.

Nous voulons modifier la propriété managedRuntimeVersion en « v1.1 » afin d’exécuter nos applications dans ce pool d’applications avec ASP.NET v1.1. Voici la ligne de commande à effectuer :

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

Vous pouvez voir dans la sortie de liste ci-dessus qu’il existe de nombreuses propriétés disponibles sur l’objet du pool d’applications, et certaines des propriétés sont imbriquées dans un sous-élément de configuration. Par exemple, les options de processus sont imbriquées sous le sous-élément « processModel ».

Si vous souhaitez définir une propriété imbriquée, utilisez la notation du chemin d’accès à l’élément comme suit :

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

Autres éléments de configuration

Outre la manipulation des propriétés de configuration avec les objets AppCmd de niveau supérieur, vous pouvez définir des propriétés de configuration sur n’importe quelle section de configuration, y compris celles associées aux objets AppCmd de niveau supérieur. Ceci est abordé plus loin dans la section intitulée « Utilisation de la configuration ».

Inspection de l’état du serveur

AppCmd fournit des fonctionnalités permettant d’inspecter différents aspects de l’état d’exécution du serveur, notamment :

  • l’état du site
  • l’état du pool d’applications
  • le processus de travail du serveur actif
  • les demandes en cours d’exécution

En outre, certains objets fournissent des commandes qui vous permettent de contrôler leur état d’exécution, telles que la commande STOP de l’objet Site et la commande RECYCLE de l’objet AppPool.

Inspection de l’état du site et du pool d’applications

L’état des sites et des pools d’applications est signalé à partir de la propriété état de chaque objet. Lors de la liste des sites ou des pools d’applications, l’état s’affiche dans la sortie par défaut. Par exemple :

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

La propriété état peut également être utilisée pour rechercher des sites ou des pools d’applications qui se trouvent dans un état spécifique. Par exemple, pour rechercher tous les pools d’applications démarrés :

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

Inspection des processus de travail en cours d’exécution

Vous pouvez utiliser l’objet WP (processus de travail) pour répertorier les processus de travail en cours d’exécution :

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

Chaque objet WP a une propriété apppool.name qui vous permet de répertorier tous les processus de travail en cours d’exécution pour un pool d’applications spécifique :

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

Inspection des demandes en cours d’exécution

L’objet Demande vous permet d’inspecter les demandes en cours d’exécution sur le serveur :

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

La liste peut être limitée aux demandes d’un site particulier, d’un pool d’applications, d’un processus de travail ou d’une URL à l’aide de la propriété appropriée pour filtrer les résultats. Voici quelques exemples :

%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

Utilisation de la configuration

IIS 7 et les versions ultérieures présentent un système de configuration hiérarchique basé sur XML similaire au système de configuration ASP.NET qui stocke la configuration du serveur dans les sections XML schématisées. La configuration peut se trouver au niveau du serveur dans le fichier ApplicationHost.config au niveau du serveur ou placée dans des fichiers de configuration Web.config distribués au sein de votre hiérarchie d’applications.

AppCmd permet une inspection et une modification complètes de la hiérarchie de configuration à partir de la ligne de commande via son objet Config. En outre, AppCmd fournit d’autres fonctions utiles telles que l’effacement de la configuration, le verrouillage et le déverrouillage, et la recherche.

Affichage de la configuration

AppCmd fonctionne avec la configuration au niveau des sections de configuration. Chaque section de configuration décrit généralement une fonctionnalité de serveur et peut contenir un ou plusieurs sous-éléments et collections.

La configuration peut être définie pour un espace de noms d’URL arbitraire, tel que pour un site, une application ou une URL. Les paramètres de configuration définis à un niveau supérieur sont hérités par tous les niveaux inférieurs, sauf s’ils sont spécifiquement remplacés à des niveaux inférieurs.

Pour afficher une configuration effective pour un niveau d’URL particulier, utilisez la commande LIST de l’objet Config comme suit :

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

<URL> est le chemin de configuration auquel la configuration effective doit être lue, par exemple « Site Web par défaut/ » ou « Site web par défaut/app1/hello.html ». S’il n’est pas spécifié, il est défini par défaut sur le niveau du serveur.

Pour en savoir plus sur la hiérarchie de configuration IIS et sur la création de chemins de configuration IIS à utiliser avec AppCmd et d’autres outils, consultez Anatomie d’un chemin de configuration pour IIS 7 et les versions supérieures.

Le paramètre section spécifie la section de configuration que vous souhaitez lire. Si il n’est pas spécifié, toutes les sections de configuration effectives au niveau de l’URL s’affichent. Par exemple, cette ligne de commande affiche toutes les configurations effectives pour l’application racine du site web par défaut :

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

Pour répertorier une section spécifique, utilisez une ligne de commande comme suit :

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

Par défaut, AppCmd affiche uniquement la configuration définie explicitement. Si vous souhaitez afficher la configuration effective, y compris les valeurs héritées ou par défaut, spécifiez le paramètre /config:* :

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

Pour afficher la liste des sections de configuration disponibles, utilisez cette ligne de commande :

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

Modification des propriétés de configuration

Dans AppCmd, chaque section de configuration est exposée en tant qu’instance d’un objet de configuration qui expose les propriétés qui représentent la section de configuration sous-jacente. Utilisez la commande SET de l’objet Config pour modifier ces propriétés. La syntaxe est :

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

<URL> est facultatif ; il spécifie à quel chemin de configuration la modification doit s’appliquer. S’il est omis, les modifications seront appliquées au niveau du serveur pour être héritées par toutes les URL.

Le paramètre section est requis ; il indique la section en cours de modification.

Par exemple, pour définir la propriété appAllowClientDebug de la section ASP pour l’URL http://localhost/app1 :

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

Pour définir les propriétés de configuration imbriquées dans les sous-éléments de la section de configuration, utilisez cette notation de chemin d’accès d’élément :

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

Spécifiez plusieurs propriétés dans une seule ligne de commande pour effectuer plusieurs modifications dans la même section de configuration.

Pour afficher toutes les propriétés qui peuvent être définies sur une section de configuration particulière, utilisez cette ligne de commande :

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

Remarque

Notez que la section asp est verrouillée par défaut. Par conséquent, l’exécution de ces commandes retourne une erreur de violation de verrou. Vous pouvez d’abord déverrouiller cette section, définir la configuration au niveau du serveur en omettant le <URL> ou les valider dans la balise d’emplacement au niveau du serveur à l’aide de /commit:apphost. Consultez Contrôle de l’emplacement de la configuration plus loin dans l’article.

Modification des collections de configuration

AppCmd prend également en charge la modification des collections de configuration. Une collection de configuration peut contenir plusieurs éléments, par exemple, la section de configuration system.webServer/modules contient une liste d’éléments de configuration de module spécifiant les modules exécutés par le serveur.

Pour définir une propriété sur un élément de collection, spécifiez l’élément de collection particulier à modifier à l’aide d’une expression d’indexeur de collection dans la notation de chemin d’accès de l’élément. L’expression d’indexeur de collection utilise des valeurs clés pour identifier un élément de collection spécifique. L’indexeur a le format suivant :

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

Le nombre de clés nécessaires pour identifier de manière unique un élément dépend de la collection. La plupart des collections ne nécessitent qu’une seule clé.

Par exemple, pour définir la propriété de type sur l’élément de collection avec la propriété de nom de clé égale à « FormsAuthentication », utilisez cette ligne de commande :

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

Pour ajouter un nouvel élément de collection, préfixez la notation du chemin d’accès de l’élément avec un signe plus, +. Dans l’expression de l’indexeur de collection, fournissez les valeurs de chaque propriété de clé. Des propriétés non clés supplémentaires peuvent également être incluses dans l’expression de l’indexeur de collection. Par exemple, cela ajoute un nouvel élément de collection de modules :

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

Pour supprimer un élément de collection, préfixez la notation du chemin d’accès de l’élément avec un signe moins, - :

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

Contrôle de l’emplacement de la configuration

Le système de configuration est hiérarchique, ce qui permet d’écrire des paramètres de configuration à plusieurs niveaux allant du fichier ApplicationHost.config au niveau du serveur aux fichiers Web.config distribués qui peuvent être présents au niveau du site, de l’application ou du répertoire virtuel.

Lorsque la configuration est écrite à un niveau particulier, elle est héritée par toutes les URL à ce niveau et aux niveaux inférieurs. Par exemple, la configuration définie dans le fichier de configuration Web.config à la racine du site est héritée par toutes les URL du site.

Par défaut, AppCmd écrit la configuration au niveau auquel elle est définie. Par exemple, si vous définissez la configuration du « Site web par défaut/ », elle est écrite dans un fichier Web.config à la racine de ce site.

Toutefois, il est possible d’écrire une configuration à un niveau supérieur et de l’appliquer uniquement à un sous-ensemble particulier des URL inférieures à l’aide d’une construction emplacement. Par exemple, l’application Web.config peut contenir une configuration appliquée à un seul répertoire au sein de cette application. AppCmd fournit cette fonctionnalité via son paramètre validation.

Le paramètre validation peut être défini sur l’une des valeurs suivantes :

  • (omis) : valeur par défaut ; écriture de la configuration au niveau pour lequel elle est définie
  • url : identique à la configuration par défaut ; écriture de la configuration au niveau pour lequel elle est définie
  • site : écriture de la configuration dans web.config à la racine du site de l’URL pour laquelle elle est définie
  • app : écriture de la configuration dans le fichier Web.config à la racine de l’application de l’URL pour laquelle elle est définie
  • apphost : écriture de la configuration au niveau du serveur, dans le fichier applicationHost.config
  • <PATH> : écriture de la configuration au niveau du chemin de configuration spécifié

Par exemple, cette ligne de commande désactive l’exploration des répertoires pour une application et écrit cette configuration dans le fichier Web.config de la racine du site :

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

Pour en savoir plus sur les chemins de configuration IIS et le contrôle de l’emplacement de la configuration, consultez Anatomie du chemin de configuration IIS 7 et des versions ultérieures.

Verrouillage et déverrouillage de la configuration

Le système de configuration permet aux sections de configuration d’être verrouillées à un niveau particulier, ce qui empêche leurs propriétés d’être remplacées à des niveaux inférieurs. Cela peut être utilisé pour empêcher les applications de modifier les paramètres que l’administrateur du serveur souhaite appliquer.

Par défaut, la plupart des sections de configuration IIS sont verrouillées au niveau du serveur. Pour configurer ces sections à des niveaux inférieurs, elles doivent être déverrouillées. AppCmd fournit la commande UNLOCK à cet effet :

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

Utilisez la commande LOCK pour verrouiller une section :

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

Notez que si vous verrouillez une section de configuration, toutes les applications qui peuvent avoir déjà configuré cette section à un niveau inférieur rencontreront une erreur de violation de verrou lorsqu’elles essaieront d’accéder à la section de configuration.

Recherche dans la configuration

AppCmd peut rechercher la hiérarchie de configuration distribuée pour tous les emplacements qui définissent des propriétés de configuration ou des valeurs de propriété particulières. La fonctionnalité de recherche de configuration peut être utilisée pour identifier les emplacements où une fonctionnalité particulière est activée ou pour garantir la conformité à une exigence de configuration particulière.

Pour rechercher sur le serveur tous les emplacements qui définissent la configuration, vous pouvez utiliser la commande SEARCH sans arguments :

%systemroot%\system32\inetsrv\APPCMD search config

Pour rechercher tous les emplacements sous un chemin de configuration particulier, par exemple tous les emplacements de configuration d’un site particulier, incluez le chemin d’accès sur la ligne de commande :

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

Pour rechercher des emplacements qui configurent une section de configuration particulière :

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

Pour rechercher des emplacements qui définissent une propriété particulière, incluez le nom de la propriété :

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

Enfin, pour rechercher des emplacements qui définissent une propriété sur une valeur spécifique :

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

Utilisation de la sortie de l’outil

Nous avons mentionné précédemment que la sortie de la commande LIST est une liste d’instances d’objet. AppCmd offre différents modes de sortie qui permettent de contrôler le niveau de détail affiché sur chaque objet.

Sortie par défaut

Prenons l’exemple des Sites LIST. Par défaut, AppCmd utilise un format de sortie compact :

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

Dans ce format de sortie, chaque instance d’objet se trouve sur une ligne, en spécifiant le type d’objet (SITE) et l’identificateur de l’objet (« Site web par défaut »). Plusieurs propriétés courantes ou importantes sont généralement en sortie (ID, liaisons et état de l’objet Site).

Sortie détaillée

La plupart des objets prennent en charge beaucoup plus de propriétés que celles présentées dans la sortie par défaut. Pour afficher toutes les propriétés de l’objet, spécifiez le paramètre text:*. Les propriétés de chaque instance sont affichées dans un format d’arborescence hiérarchique :

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

Dans l’exemple ci-dessus, la sortie a été abrégée : la sortie réelle inclut de nombreuses propriétés supplémentaires.

Sortie pour utiliser d’autres outils de ligne de commande

AppCmd fournit un mode de sortie qui affiche uniquement une propriété spécifique de chaque instance d’objet. Spécifiez le nom de la propriété à afficher avec le paramètre text:<PROPERTY>. Par exemple, cette commande retourne toutes les instances de répertoires virtuels disponibles, affichant uniquement la propriété physicalPath de chacune d’elles :

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

Vous pouvez bien sûr afficher l’une des propriétés valides du type objet répertorié.

Il est parfois souhaitable d’utiliser la sortie d’AppCmd avec des outils en ligne de commande et des commandes shell existants, telles que la commande FOR et FINDSTR.EXE. Ces outils fonctionnent souvent mieux lorsque chaque élément de données intéressant se trouve sur une ligne distincte.

Par exemple, imaginez une ligne de commande qui produit une liste de répertoires de chaque répertoire virtuel IIS. La ligne de commande doit acquérir une liste de chemins d’accès physiques à partir de chacun des répertoires virtuels d’intérêt, puis exécuter une commande DIR sur chacun de ces chemins à l’aide de la commande FOR pour effectuer une boucle :

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

Sortie de configuration

La plupart des objets contiennent des données de configuration qui proviennent directement des sections de configuration associées. L’objet Config est l’exemple principal de ça et sert de wrapper direct sur le système de configuration IIS. Chaque instance d’objet retournée par l’objet Config est une section de configuration. D’autres objets, tels que Site, contiennent également des informations de configuration dans le cadre des propriétés de l’objet.

Si vous souhaitez afficher les informations de configuration des objets retournés au format XML brut du système de configuration, vous pouvez utiliser le paramètre configuration. Par exemple, pour afficher les informations de configuration XML de l’objet de site, utilisez une ligne de commande comme suit :

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

Sortie XML

L’outil prend également en charge son propre format de sortie XML, qui génère des jeux de résultats XML bien formés pour les objets retournés lors de l’exécution de la commande. Cela permet de distinguer AppCmd des outils de ligne de commande précédents fournis par l’équipe IIS.

  • Création de tâches de gestion complexes. L’objectif principal de cette capacité consiste à permettre aux jeux de résultats générés par AppCmd d’être entrés dans une autre commande AppCmd. Cela vous permet d’exécuter rapidement des tâches de gestion complexes sans écrire de code d’application.
  • Exécution efficace des opérations par lots. L’exécution de l’outil un grand nombre de fois lors de l’exécution d’un grand nombre d’opérations (par exemple, la création de 10 000 sites) peut être lente en raison de la surcharge de création et d’initialisation du processus pour chaque opération. Au lieu de cela, une seule commande de l’outil peut être exécutée sur des données d’entrée contenues dans un ensemble de données XML, ce qui réduit considérablement le temps d’exécution du traitement des données d’entrée.
  • Exportation de données vers d’autres outils. Le format XML permet aux jeux de données générés par AppCmd d’être utilisés avec d’autres outils pour traiter, stocker ou fournir des rapports. Par exemple, les données AppCmd peuvent être utilisées avec des transformateurs XSLT pour générer des rapports de gestion HTML, importées dans SQL Server 2005 pour une analyse plus approfondie, ou chargées par ADO.NET pour un traitement programmatique.

Par exemple, pour générer la liste des sites en mode XML :

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

Pour en savoir plus sur la fonctionnalité de canalisation et sur la façon de l’exploiter pour une gestion puissante de la ligne de commande, consultez http://mvolo.com/do-complex-iis-management-tasks-easily-with-appcmd-command-piping/.

Résumé

Dans cette vue d’ensemble, nous vous avons familiarisé avec toutes les commandes puissantes disponibles à l’aide de l’utilitaire de ligne de commande IIS 7 et les versions ultérieures, AppCmd.exe.

Vous pouvez également trouver d’autres sujets sur AppCmd et apprendre des moyens puissants pour gérer votre serveur à partir de la ligne de commande sur mon blog, à l’adresse http://mvolo.com/category/appcmd/.