Composant logiciel enfichable PowerShell : utilisation de cmdlets basées sur des tâches du composant logiciel enfichable IIS PowerShell
par Thomas Deml
Introduction
Les cmdlets de composant logiciel enfichable IIS PowerShell peuvent être regroupées en trois catégories :
- Cmdlets requises par la hiérarchie du fournisseur
- Cmdlets de configuration de bas niveau
- Cmdlets basées sur des tâches
Ce guide présente les cmdlets IIS basées sur des tâches et fournit des exemples de leur utilisation.
Cmdlets requises par la hiérarchie du fournisseur
Très vite, IIS a décidé de rendre la configuration IIS disponible en tant que hiérarchie de sites, d’applications, de répertoires virtuels et de pools d’applications. Les clients ont alors l’avantage de pouvoir naviguer vers un emplacement dans la hiérarchie, par exemple un site ou une application, et définir des paramètres dans ce contexte. Pour prendre en charge une hiérarchie de navigation, certaines cmdlets PowerShell prédéfinies telles que New-Item, Set-ItemProperty, etc., doivent être implémentées. La hiérarchie et ces cmdlets intégrées ont été publiées dans la Préversion technique 1 d’avril 2008.
Cmdlets de configuration de bas niveau
Le système de configuration IIS a été entièrement revu dans la version 7. Le nouveau système de configuration est entièrement basé sur XML, piloté par schéma et complètement extensible. Le nouveau serveur FTP d’IIS (FTP7) et de nombreux autres modules IIS tels que la réécriture d’URL, WebDAV, etc., tirent profit de cette extensibilité pour se connecter au système de configuration IIS.
Cette extensibilité rend difficile la publication de cmdlets avec des arguments statiques. Supposez qu’on rallonge une section de configuration existante, par exemple en ajoutant une propriété maBelleConfiguration à la section de configuration virtualDirectory. Sans réviser les cmdlets IIS, le paramètre maBelleConfiguration ne pourrait pas être réglé via les cmdlets du composant logiciel enfichable PowerShell.
La Préversion technique 1 du composant logiciel enfichable IIS PowerShell inclut uniquement les cmdlets de bas niveau qui prennent en compte l’extensibilité totale de la configuration. Chaque paramètre de configuration IIS (plus de 100 sections de configuration avec des collections, des énumérations, etc.) peut être configuré à l’aide de ces cmdlets. Ces cmdlets de bas niveau fonctionnent également sur des configurations personnalisées, par exemple si vous étendez la configuration IIS en y ajoutant votre propre section de configuration.
Voici la liste des cmdlets de bas niveau que nous publions depuis la Préversion technique 1 d’avril 2008 :
Add-WebConfiguration
Add-WebConfigurationProperty
Begin-WebCommitDelay
Clear-WebConfiguration
End-WebCommitDelay
Get-WebURL
Get-WebConfiguration
Get-WebConfigurationProperty
Get-WebItemState
Remove-WebConfigurationProperty
Restart-WebItem
Set-WebConfiguration
Set-WebConfigurationProperty
Select-WebConfiguration
Start-WebItem
Stop-WebItem
Cmdlets basées sur des tâches
Et le plus formidable dans tout ça ? Pour les tâches IIS quotidiennes telles que la création de sites web, le traçage de requête activé, l’ajout d’un gestionnaire ou d’un module, vous allez probablement vouloir utiliser les cmdlets basées sur des tâches fournies avec le composant logiciel enfichable IIS PowerShell. Voici une liste des cmdlets basées sur des tâches :
Add-WebConfigurationLock
Backup-WebConfiguration
Clear-WebRequestTracingSettings
ConvertTo-WebApplication
Disable-WebGlobalModule
Disable-WebRequestTracing
Enable-WebGlobalModule
Enable-WebRequestTracing
Get-WebAppDomain
Get-WebApplication
Get-WebAppPoolState
Get-WebBinding
Get-WebConfigFile
Get-WebConfigurationBackup
Get-WebConfigurationLocation
Get-WebConfigurationLock
Get-WebFilePath
Get-WebGlobalModule
Get-WebHandler
Get-WebItemState
Get-WebManagedModule
Get-WebRequest
Get-Website
Get-WebsiteState
Get-WebURL
Get-WebVirtualDirectory
New-WebApplication
New-WebAppPool
New-WebBinding
New-WebFtpSite
New-WebGlobalModule
New-WebHandler
New-WebManagedModule
New-Website
New-WebVirtualDirectory
Remove-WebApplication
Remove-WebAppPool
Remove-WebBinding
Remove-WebConfigurationBackup
Remove-WebConfigurationLocation
Remove-WebConfigurationLock
Remove-WebGlobalModule
Remove-WebHandler
Remove-WebManagedModule
Remove-Website
Remove-WebVirtualDirectory
Rename-WebConfigurationLocation
Restart-WebAppPool
Set-WebBinding
Set-WebGlobalModule
Set-WebHandler
Set-WebManagedModule
Start-WebAppPool
Start-Website
Stop-WebAppPool
Stop-Website
Aide pour les cmdlets basées sur des tâches
Le système d’aide intégré fournit le moyen le plus simple de savoir quelles cmdlets sont disponibles et comment les utiliser. La commande suivante liste toutes les cmdlets IIS.
get-command -pssnapin WebAdministration
Une autre méthode consiste à rechercher le préfixe -Web que nous utilisons pour toutes les cmdlets IIS. Essayez cette commande :
get-command *-Web*
Le système d’aide intégré vous donne une description brève d’une cmdlet individuelle, des paramètres et des arguments qu’elle assume, et fournit des exemples pour son utilisation. Essayez ce qui suit :
get-help New-WebSite
Pour obtenir une aide complète sur une cmdlet particulière, vous pouvez entrer ce qui suit :
get-help New-Website -full
Si vous souhaitez uniquement voir un exemple de son utilisation, essayez la commande suivante :
get-help New-Website -example
Exemple de bout en bout
La puissance des cmdlets basées sur des tâches fait ses preuves lorsque vous l’utilisez dans un scénario de bout en bout. Dans l’exemple suivant, nous allons créer un nouveau site web, y ajouter du contenu, apporter des modifications de configuration, activer le traçage des requêtes et demander la nouvelle page de contenu.
Étape 1 : Création d’un nouveau site web
Entrez les commandes suivantes :
PS IIS:\>mkdir "$env:systemdrive\inetpub\MyNewWebSite"
Cela crée un répertoire physique pour notre nouveau site.
PS IIS:\>New-Website -name "MyNewWebSite" -PhysicalPath "$env:systemdrive\inetpub\MyNewWebSite" -port 81
La ligne ci-dessus crée un site web qui pointe vers le répertoire nouvellement créé et qui écoute sur le port 81.
Étape 2 : Ajouter du contenu au site
Les commandes suivantes naviguent dans l’espace de noms IIS et créent un nouveau fichier de contenu.
PS IIS:\>cd IIS:\sites\MyNewWebsite
La commande ci-dessus navigue vers le nœud MyNewWebSite dans l’espace de noms IIS.
PS IIS:\Sites\MyNewWebSite> dir
La commande ci-dessus liste tout le contenu du nouveau site web. Rien n’est affiché, car il n’y a pas de contenu.
PS IIS:\Sites\MyNewWebSite> notepad "$(Get-WebFilePath .)\test.htm"
La commande ci-dessus ouvre le Bloc-notes et vous permet de modifier test.htm. Au lieu de devoir vous rappeler l’endroit où se trouve le chemin physique de votre site web. Entrez du texte, par exemple « Salut tout le monde » et enregistrez le fichier dans le Bloc-notes.
PS IIS:\Sites\MyNewWebSite> dir
Si vous entrez à nouveau la commande dir, elle affiche le fichier test.htm nouvellement créé.
PS IIS:\Sites\MyNewWebSite> Get-WebURL -content ".\test.htm"
La commande ci-dessus effectue une requête HTTP sur le site web nouvellement créé et retourne le contenu que vous avez entré dans le Bloc-notes.
Étape 3 : Activation du traçage des requêtes
IMPORTANT : Pour que cet exemple fonctionne, la fonctionnalité de traçage IIS doit être activée. Dans Windows Vista, ouvrez le Panneau de configuration, cliquez sur « Programmes » et sélectionnez « Activer ou désactiver des fonctionnalités Windows ». Trouvez et sélectionnez « Traçage » sous « Internet Information Services », « Services World Wide Web », « Intégrité et diagnostics » et cliquez sur « OK ».
Dans la dernière étape, nous activons le traçage des requêtes. Le traçage des demandes web est une fonctionnalité IIS qui vous permet d’obtenir un journal détaillé de ce qui s’est passé pendant l’exécution d’une requête. Cette fonctionnalité est extrêmement précieuse dans de nombreux scénarios de dépannage. Pour activer le traçage des requêtes web, il nous faut simplement exécuter une autre cmdlet qui prend en compte l’emplacement, appelée Enable-WebRequestTracing.
PS IIS:\Sites\MyNewWebSite> Enable-WebRequestTracing
Examinons maintenant le fichier web.config pour savoir quelle configuration a été écrite par la cmdlet Enable-WebRequestTracing. Pour ce faire, nous utilisons la cmdlet Get-WebConfigFile qui prend également en compte l’emplacement :
PS IIS:\Sites\MyNewWebSite> notepad (Get-WebConfigFile)
La configuration se présente comme suit :
Contenu du fichier web.config
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<tracing>
<traceFailedRequests>
<add path="*">
<traceAreas>
<add provider="ASPNET" areas="Infrastructure,Module,Page,AppServices" verbosity="Verbose" />
</traceAreas>
<failureDefinitions timeTaken="00:00:30" statusCodes="200-500" verbosity="Warning" />
</add>
</traceFailedRequests>
</tracing>
</system.webServer>
</configuration>
La configuration importante est la règle failureDefinitions. Par défaut, un fichier de trace est généré lorsque le code d’erreur est compris entre 200 et 500, ou lorsque la requête prend plus de 30 secondes. Émettons une requête qui génère une réponse dans la plage d’erreurs 200-500 en exécutant la commande suivante :
PS IIS:\Sites\MyNewWebSite>Get-WebURL -url http://localhost:81/URL_DOES_NOT_EXIST
Une requête adressée à une ressource non existante génère une erreur 404. Pour examiner le fichier de trace, vous devez naviguer vers l’emplacement suivant :
PS IIS:\Sites\MyNewWebSite>cd "$env:systemdrive\inetpub\logs\failedReqLogfiles\w3svc2\"
Vous pouvez maintenant examiner le fichier de trace en ouvrant le fichier xml dans Internet Explorer :
PS C:\inetpub\logs\FailedReqLogFiles\W3SVC2>&"$env:programfiles\Internet Explorer\iexplore.exe" "$env:systemdrive\inetpub\logs\failedReqLogfiles\w3svc2\fr000001.xml"
Résumé
Les nouvelles cmdlets basées sur des tâches permettent aux administrateurs d’effectuer facilement des tâches IIS quotidiennes avec PowerShell. Les cmdlets offrent une syntaxe et une aide intuitives, ainsi qu’une prise en compte de l’emplacement.
Les cmdlets IIS de bas niveau publiées depuis la Préversion technique 1 autorisent tout de même des tâches d’administration IIS plus avancées.