Snap-in do PowerShell: tarefas de configuração avançada
por Thomas Deml
Este artigo contém etapas para realizar algumas tarefas de configuração avançada usando caracteres curinga e consultas XPath.
Introdução
No artigo anterior, você conheceu os cmdlets *-WebConfiguration e *-WebConfigurationProperty. Esses cmdlets são mais interessantes do que você imagina. O parâmetro -filter não é somente uma forma de especificar uma seção de configuração. Ele consiste em uma consulta XPath. Neste artigo, você aprende a aproveitar esse recurso. Também há algumas maneiras interessantes de usar curingas com os comandos *-WebConfiguration*.
Este artigo usa sites, aplicativos e diretórios virtuais criados em exemplos anteriores.
Usando consultas XPath
Confira um exemplo simples que mostra como usar curingas com o cmdlet Get-WebConfigurationProperty:
PS IIS:\Sites\DemoSite\DemoApp> Get-WebConfigurationProperty -filter //defaultDocument/files -name Collection[value="index*"] | select value
Confira abaixo mais um exemplo. Nele, é possível notar todos os mapeamentos de manipulador que serão executados por 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
Imagine que você não pretende usar a extensão .aspx para seus arquivos ASP.NET e deseja alterar todos os mapeamentos de manipulador do IIS de *.aspx para *.mspx. É possível ser menor do que abaixo?
PS IIS:\Sites\DemoSite\DemoApp> set-webconfiguration "/system.webServer/handlers/add[@path='*.aspx']/@path" -value "*.mspx"
Hora de conferir se as alterações foram definidas:
(get-webconfiguration //handlers).collection | select name,path
Agora, é uma boa ideia conferir o próprio arquivo de configuração. Para isso, é possível usar o cmdlet get-item, que foi analisado em um artigo anterior.
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>
Observe que o sistema de configuração removeu os manipuladores antigos e os substituiu por novos que agora são mapeados para *.mspx.
Como descobrir a configuração do IIS
É ótimo saber o que você deseja configurar. Mas e se você não souber? Confira algumas coisas que podem ajudar.
Como mostrar as seções de configuração do IIS disponíveis
get-webconfiguration //* | where {$_.psbase.SectionPath -like "*" -and $_.psbase.SectionPath.length -gt 0} | select SectionPath
Como mostrar as propriedades que você pode configurar em uma seção específica:
get-webconfiguration system.webServer/caching | select -exp Attributes | select Name
A junção dos dois acima, ou seja, como mostrar todas as seções e as respectivas propriedades.
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
No momento, essas são coisas que podem ajudar você, mas temos a intenção de incluir esses comandos em algumas funções em uma versão prévia técnica futura.
Resumo
Neste artigo, você conferiu etapas para realizar tarefas complexas de configuração do IIS usando caracteres curinga e consultas XPath. O próximo artigo discutirá como descobrir dados de estado e de runtime.