Partager via


Composant logiciel enfichable PowerShell : données d’exécution

par Thomas Deml

Les procédures pas à pas antérieures vous montraient comment interroger et modifier les paramètres de configuration IIS. Il reste toutefois un domaine inexploré : les données d’exécution.

Introduction

Les choses changent, le logiciel IIS n’est en rien différent. Les sites démarrent ou s’arrêtent, les pools d’applications expirent ou sont recyclés, les demandes arrivent et les réponses sont envoyées, les runtimes AppDomains sont générés ou arrêtés. IIS implémente une interface nommée RSCA (API de contrôle et d’état des exécutions) qui vous permet de surveiller ce qui se passe dans le système.

Le composant logiciel enfichable IIS PowerShell utilise cette interface et expose certaines de ses données via l’espace de noms du composant logiciel enfichable IIS. L’état des sites et des pools d’applications est configurable via les cmdlets Get-WebItemState, Start-WebItem, Stop-WebItem et Restart-WebItem. L’état d’exécution comme les processus de travail en cours d’exécution, les demandes en cours d’exécution et les runtimes AppDomains chargés sont exposés via l’espace de noms IIS.

Cette procédure pas à pas utilise les sites, applications et répertoires virtuels créés dans un guide précédent.

État du pool d’applications et des sites

Nous commençons par interroger l’état de nos sites web.

État du site

PS IIS:\> cd Sites
PS IIS:\Sites> Get-WebItemState IIS:\Sites\DemoSite
Started

Vous pouvez utiliser la cmdlet Stop-WebItem pour arrêter DemoSite :

PS IIS:\Sites> Stop-WebItem DemoSite
PS IIS:\Sites> Get-WebItemState IIS:\Sites\DemoSite
Stopped

Vous démarrez des travaux de la même manière :

PS IIS:\Sites> Start-WebItem DemoSite
PS IIS:\Sites> Get-WebItemState IIS:\sites\DemoSite
Started

État d’AppPool

Nous voulons effectuer la même chose pour les pools d’applications

PS IIS:\> cd AppPools
PS IIS:\AppPools> Get-WebItemState DemoAppPool
Started
PS IIS:\AppPools> Stop-WebItem DemoAppPool
PS IIS:\AppPools> Get-WebItemState DemoAppPool
Stopped

Il existe également la propriété d’état que vous pouvez lire sur le nœud AppPools. Amusons-nous avec l’exemple suivant. Activez vos haut-parleurs et exécutez la commande suivante :

dir 'iis:\AppPools' | foreach {[void](new-object -com Sapi.SPVoice).Speak("Application Pool State:");}{$poolState = "Application Pool " + $_.Name +" is " + $_.State;$poolState;[void](new-object -com Sapi.SPVoice).Speak($poolState);}

Redémarrez maintenant DemoAppPool :

PS IIS:\AppPools> Start-WebItem DemoAppPool

Recyclage d’AppPools

La seule différence avec AppPools est que vous pouvez les recycler. La cmdlet pour recycler AppPools est appelée Restart-WebItem et non Recycle-WebItem. PowerShell a des règle d’affectation de noms et nous avons du nous contenter de Restart-WebItem. Développons un peu plus cet exemple en effectuant ce qui suit :

  1. Effectuer une demande à la page par défaut de « Site web par défaut ».
  2. Interroger le PID du processus de travail constitue ce qui gère la demande.
  3. Recyclage du pool d’applications.
  4. Demandez le PID une nouvelle fois pour confirmer que le processus a été redémarré.

1. Demander la page par défaut

Nous utilisons la classe Net.WebClient pour demander http://localhost/. Au lieu d’afficher la sortie à l’écran, nous regardons simplement la longueur de la réponse.

PS IIS:\AppPools> $response = (new-object Net.WebClient).DownloadString("http://localhost/")
PS IIS:\AppPools> $response.Length
689

2. Interroger le PID du processus de travail

En supposant que vous n’avez aucun autre site web et aucune application actifs sur votre ordinateur, la commande suivante doit retourner un seul PID :

PS IIS:\AppPools> get-process w3wp | select processname,id
ProcessName                                                                                      Id
-----------                                                                                      --
w3wp                                                                                           3684

Il existe un meilleur moyen pour accéder aux processus de travail, traité un peu plus tard dans cette procédure pas à pas.

3. Recycler le pool d’applications

Nous recyclons le pool d’applications en utilisant la cmdlet Restart-WebItem :

PS IIS:\AppPools> Restart-WebItem DefaultAppPool

4. Interroger le PID du processus de travail

Si AppPool a été correctement recyclé, votre ID de processus doit avoir été changé.

PS IIS:\AppPools> get-process w3wp | select processname,id
ProcessName                                                                                      Id
-----------                                                                                      --
w3wp                                                                                           5860

Processus de travail et demandes

La cmdlet get-process ne vous aide pas pour identifier le pool d’applications servi par un processus de travail particulier. Vous pouvez toutefois effectuer facilement cette opération :

PS IIS:\AppPools> dir DefaultAppPool\WorkerProcesses
               processId                  Handles                    state StartTime
               ---------                  -------                    ----- ---------
                    6612                      326                        1 3/28/2008 12:20:27 PM

Demandes en cours d’exécution

Si votre ordinateur n’est pas un ordinateur de production, vous aurez du mal à consulter les demandes en cours d’exécution. La demande est révolue depuis longtemps, jusqu’à ce que vous fassiez une demande via Internet Explorer et que vous reveniez dans la console PowerShell. Voici une petite aide, une demande prenant du temps.

Set-Content "$env:systemdrive\inetpub\wwwroot\long.aspx" "<%@ Page language=`"C#`"%><%System.Threading.Thread.Sleep(30000);Response.Write(`"slept for 30 seconds`");%>"

Si vous souhaitez consulter des demandes en cours d’exécution, vous pouvez saisir la commande suivante (NOTE : l’ID de processus que vous devez utiliser pour la commande get-item est différent sur votre ordinateur) :

PS IIS:\AppPools\DefaultAppPool\WorkerProcesses> dir
Process  State      Handles  Start Time
Id
-------- -----      -------  ----------
6612     Running    737      3/31/2008 8:18:15 AM
PS IIS:\AppPools\DefaultAppPool\WorkerProcesses> (get-item 6612).GetRequests(0).Collection
requestId    : d8000001800000f5
connectionId : d8000001600000f3
verb         : GET
url          : /long.aspx
siteId       : 1

Ou si vous souhaitez voir le temps déjà écoulé depuis votre démarrage de la demande :

PS IIS:\AppPools\DefaultAppPool\WorkerProcesses> (get-item 6612).GetRequests(0).Collection | select url,timeElapsed
url                                                                                     timeElapsed
---                                                                                     -----------
/long.aspx                                                                                     2637

Résumé

Opération terminée. Dans cette procédure pas à pas, vous avez appris à interroger l’état des sites et pool d’applications IIS. Vous avez découvert comment les démarrer et les arrêter. Vous avez également appris comment consulter des processus de travail et des demandes en cours d’exécution.