Composant logiciel enfichable PowerShell : tâches de configuration avancées
par Thomas Deml
Dans ce guide, vous apprenez à effectuer des tâches de configuration avancées à l’aide de requêtes XPath et de caractères génériques.
Introduction
Le guide précédent vous a présenté les cmdlets *-WebConfiguration et *-WebConfigurationProperty. Mais ces cmdlets sont plus complexes qu’il n’y paraît. Le paramètre -filter n’est pas simplement un moyen de spécifier une section de configuration. Il s’agit d’une requête XPath et ce guide permet de découvrir comment en tirer profit. Vous pouvez également utiliser des caractères génériques de manière intéressante avec les commandes *-WebConfiguration*.
Ce guide utilise les sites, applications et répertoires virtuels créés dans les exemples précédents.
Utilisation de requêtes XPath
Voici un exemple simple qui vous montre comment utiliser des caractères génériques avec la cmdlet Get-WebConfigurationProperty :
PS IIS:\Sites\DemoSite\DemoApp> Get-WebConfigurationProperty -filter //defaultDocument/files -name Collection[value="index*"] | select value
En voici un autre. Ici, tous les mappages de gestionnaires qui seront exécutés par ASPNET_ISAPI.DLL :
PS IIS:\Sites\DemoSite\DemoApp> Get-WebConfigurationProperty -filter //handlers -name Collection[scriptProcessor="*aspnet_isapi.dll"] | select name,path
name path
---- ----
svc-ISAPI-2.0-64 *.svc
svc-ISAPI-2.0 *.svc
AXD-ISAPI-2.0 *.axd
PageHandlerFactory-ISAPI-2.0 *.mspx
SimpleHandlerFactory-ISAPI-2.0 *.ashx
WebServiceHandlerFactory-ISAPI-2.0 *.asmx
HttpRemotingHandlerFactory-rem-ISAPI-2.0 *.rem
HttpRemotingHandlerFactory-soap-ISAPI-2.0 *.soap
AXD-ISAPI-2.0-64 *.axd
PageHandlerFactory-ISAPI-2.0-64 *.mspx
SimpleHandlerFactory-ISAPI-2.0-64 *.ashx
WebServiceHandlerFactory-ISAPI-2.0-64 *.asmx
HttpRemotingHandlerFactory-rem-ISAPI-2.0-64 *.rem
HttpRemotingHandlerFactory-soap-ISAPI-2.0-64 *.soap
Supposons que vous n’êtes pas particulièrement satisfait de l’extension .aspx pour vos fichiers ASP.Net et que vous souhaitez modifier tous les mappages de gestionnaires IIS de *.aspx à *.mspx. Peut-on faire plus court ?
PS IIS:\Sites\DemoSite\DemoApp> set-webconfiguration "/system.webServer/handlers/add[@path='*.aspx']/@path" -value "*.mspx"
Voyons si les modifications ont été définies :
(get-webconfiguration //handlers).collection | select name,path
Examinons maintenant le fichier de configuration lui-même. Nous pouvons utiliser la cmdlet get-item que nous avons découverte dans un guide précédent.
PS IIS:\Sites\DemoSite\DemoApp> get-content (((get-item .).physicalPath).ToString() + "\web.config")
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<handlers>
<remove name="PageHandlerFactory-ISAPI-2.0-64" />
<remove name="PageHandlerFactory-ISAPI-2.0" />
<remove name="PageHandlerFactory-Integrated" />
<add name="PageHandlerFactory-Integrated" path="*.mspx" verb="GET,HEAD,POST,DEBUG" type="System.Web.UI.PageHandlerFactory" preCondition="integratedMode" />
<add name="PageHandlerFactory-ISAPI-2.0" path="*.mspx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" responseBufferLimit="0" />
<add name="PageHandlerFactory-ISAPI-2.0-64" path="*.mspx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" responseBufferLimit="0" />
</handlers>
</system.webServer>
</configuration>
Vous pouvez constater que le système de configuration a supprimé les anciens gestionnaires et les a remplacés par de nouveaux gestionnaires qui sont désormais mappés sur *.mspx.
Découverte de la configuration d'IIS
Elle est géniale si vous savez ce que vous souhaitez configurer. Et si ce n’était pas le cas ? Voici quelques applications d’assistance.
Affichage des sections de configuration IIS disponibles
get-webconfiguration //* | where {$_.psbase.SectionPath -like "*" -and $_.psbase.SectionPath.length -gt 0} | select SectionPath
Affichage des propriétés que vous pouvez configurer dans une section particulière :
get-webconfiguration system.webServer/caching | select -exp Attributes | select Name
Leur conjugaison, c’est-à-dire l’affichage de toutes les sections et leurs propriétés.
get-webconfiguration //* | where {$_.psbase.SectionPath -like "*" -and $_.psbase.SectionPath.length -gt 0} | foreach {$_.SectionPath.ToUpper();get-webconfiguration $_.SectionPath | select -exp Attributes | select Name;"`n"} | more
Nous allons probablement intégrer ces commandes à certaines fonctions lors d’une Préversion technique ultérieure, mais voilà ce que vous avez pour l’instant :).
Résumé
Dans ce guide, vous avez appris à accomplir des tâches de configuration IIS complexes à l’aide de caractères génériques et de requêtes XPath. Le guide suivant explique comment déceler les données d’état et de runtime.