Share via


Snap-in do PowerShell: Dados em Tempo de Execução

por Thomas Deml

Os passo a passo anteriores mostraram como consultar e alterar as configurações do IIS. No entanto, há uma área inexplorada: dados em tempo de execução.

Introdução

As coisas mudam, o IIS não é diferente. Os sites são iniciados ou interrompidos, pools de aplicativos são reciclados ou com o tempo limite, as solicitações entram e as respostas são enviadas, os AppDomains são gerados ou desligados. O IIS implementa uma interface chamada RSCA (API de controle e estado de tempo de execução) que permite monitorar o que está acontecendo no sistema.

O Snap-in do IIS PowerShell usa essa interface e expõe alguns de seus dados por meio do namespace snap-in do IIS. O estado de Pools de Sites e Aplicativos é configurável por meio dos cmdlets Get-WebItemState, Start-WebItem, Stop-WebItem e Restart-WebItem. O estado de tempo de execução, como processos de trabalho em execução no momento, executando solicitações e AppDomains carregados, é exposto por meio do namespace do IIS.

Este passo a passo usa os sites, aplicativos e diretórios virtuais que foram criados em um passo a passo anterior.

Estado do Pool de Sites e Aplicativos

Estamos começando consultando o estado de nossos sites.

Estado do Site

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

A interrupção do DemoSite pode ser obtida com o cmdlet Stop-WebItem:

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

A inicialização funciona da mesma maneira, é claro:

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

Estado do AppPool

Queremos fazer o mesmo para Pools de Aplicativos

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

Mas também há a propriedade de estado que você pode ler no nó AppPools. Vamos nos divertir com o próximo exemplo. Ative os alto-falantes e execute o seguinte comando:

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);}

Agora, inicie o DemoAppPool novamente:

PS IIS:\AppPools> Start-WebItem DemoAppPool

Reciclando AppPools

A única diferença com o AppPools é que eles podem ser reciclados. O cmdlet para reciclar AppPools é chamado Restart-WebItem e não Recycle-WebItem. O PowerShell tem regras de nomenclatura bastante rígidas e tivemos que nos contentar com Restart-WebItem. Vamos expandir este exemplo um pouco por

  1. Fazendo uma solicitação para a página padrão do 'Site Padrão'.
  2. Consultar o PID do processo de trabalho é que trata a solicitação.
  3. Reciclando o pool de aplicativos.
  4. Solicitando o PID novamente para confirmar se o processo foi reiniciado.

1. Solicitando a página padrão

Usamos a classe Net.WebClient para solicitar http://localhost/. Em vez de exibir a saída na tela, estamos apenas olhando para o comprimento da resposta.

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

2. Consultando o PID do Processo de Trabalho

Supondo que você não tenha outros sites e aplicativos ativos em seu computador, o seguinte comando deve retornar apenas um PID:

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

Há uma maneira melhor de chegar aos processos de trabalho, tratados um pouco mais tarde neste passo a passo.

3. Reciclando o pool de aplicativos

Reciclamos o Pool de Aplicativos usando o cmdlet Restart-WebItem:

PS IIS:\AppPools> Restart-WebItem DefaultAppPool

4. Consultando o PID do Processo de Trabalho

Se o AppPool tiver sido reciclado com êxito, a ID do processo deverá ter sido alterada.

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

Processos e Solicitações de Trabalho

O cmdlet get-process não ajuda você a descobrir qual pool de aplicativos um processo de trabalho específico está servindo. No entanto, isso pode ser feito facilmente:

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

Atualmente Executando Solicitações

Se o computador não for um computador de produção, você terá dificuldade em examinar as solicitações em execução no momento. A solicitação já se foi há muito tempo até que você faça uma solicitação por meio do Internet Explorer e volte para o console do PowerShell. Aqui está um pequeno auxiliar; uma solicitação que leva muito tempo.

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

Se você quiser examinar as solicitações em execução no momento, poderá digitar o seguinte comando (OBSERVAÇÃO: a ID do processo que você precisa usar para o comando get-item será diferente em seu computador):

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 se você quiser ver quanto tempo já passou desde que iniciou a solicitação:

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

Resumo

Concluído. Neste passo a passo, você aprendeu a consultar o estado dos Pools de Aplicativos e Sites do IIS. Você descobriu como começar e pará-los. Você também aprendeu a examinar os processos de trabalho e a executar solicitações no momento.