Condividi tramite


Snap-in di PowerShell: dati in fase di esecuzione

di Thomas Deml

Le procedure dettagliate precedenti illustrano come eseguire query e modificare le impostazioni di configurazione di IIS. A sinistra è presente un'area inesplorata: i dati di runtime.

Introduzione

Le cose cambiano, IIS non è diverso. I siti vengono avviati o arrestati, il riciclo o il timeout dei pool di applicazioni, le richieste vengono inviate e le risposte vengono inviate, AppDomains viene generato o arrestato. IIS implementa un'interfaccia denominata RSCA (API di controllo e stato di runtime) che consente di monitorare le operazioni eseguite nel sistema.

Lo snap-in di IIS PowerShell usa questa interfaccia ed espone alcuni dei relativi dati tramite lo spazio dei nomi Snap-in IIS. Lo stato di Siti e pool di applicazioni è configurabile tramite i cmdlet Get-WebItemState, Start-WebItem, Stop-WebItem e Restart-WebItem. Lo stato di runtime, ad esempio l'esecuzione di processi di lavoro, attualmente l'esecuzione di richieste e il caricamento di AppDomains viene esposto tramite lo spazio dei nomi IIS.

Questa procedura dettagliata usa i siti, le applicazioni e le directory virtuali creati in una procedura dettagliata precedente.

Siti e stato del pool di applicazioni

Si inizia eseguendo una query sullo stato dei siti Web.

Stato siti

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

L'arresto di DemoSite può essere ottenuto con il cmdlet Stop-WebItem:

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

L'avvio funziona allo stesso modo:

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

Stato di AppPool

Si vuole eseguire la stessa operazione per i pool di applicazioni

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

Ma esiste anche la proprietà di stato che è possibile leggere nel nodo AppPools. Diamo un po' di divertimento con l'esempio seguente. Attivare gli altoparlanti ed eseguire il comando seguente:

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

Avviare di nuovo DemoAppPool:

PS IIS:\AppPools> Start-WebItem DemoAppPool

Riciclo di AppPool

L'unica differenza con AppPools è che possono essere riciclati. Il cmdlet per riciclare AppPools viene chiamato Restart-WebItem e non Recycle-WebItem. PowerShell ha regole di denominazione piuttosto rigide e abbiamo dovuto accontentarci di Restart-WebItem. Ora si espande questo esempio un po' di più

  1. Effettuare una richiesta alla pagina predefinita del "Sito Web predefinito".
  2. L'esecuzione di query sul PID del processo di lavoro è la gestione della richiesta.
  3. Riciclo del pool di applicazioni.
  4. Richiedere di nuovo il PID per confermare che il processo è stato riavviato.

1. Richiesta della pagina predefinita

La classe Net.WebClient viene usata per richiedere http://localhost/. Invece di visualizzare l'output sullo schermo, si sta semplicemente esaminando la lunghezza della risposta.

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

2. Esecuzione di query sul PID del processo di lavoro

Supponendo che nel computer non siano presenti altri siti Web e applicazioni attivi, il comando seguente deve restituire un solo PID:

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

Esiste un modo migliore per accedere ai processi di lavoro, gestiti più avanti in questa procedura dettagliata.

3. Riciclare il pool di applicazioni

Il pool di applicazioni viene riciclato usando il cmdlet Restart-WebItem:

PS IIS:\AppPools> Restart-WebItem DefaultAppPool

4. Esecuzione di query per il PID del processo di lavoro

Se AppPool è stato riciclato correttamente, l'ID processo dovrebbe essere stato modificato.

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

Processi di lavoro e richieste

Il cmdlet get-process non consente di capire quale pool di applicazioni gestisce un processo di lavoro specifico. Questa operazione può essere eseguita facilmente, tuttavia:

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

Attualmente in esecuzione delle richieste

Se il computer non è un computer di produzione, sarà difficile esaminare le richieste attualmente in esecuzione. La richiesta non è più disponibile fino a quando non si effettua una richiesta tramite Internet Explorer e si torna alla console di PowerShell. Ecco un piccolo helper; una richiesta che richiede molto tempo.

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

Se si vogliono esaminare le richieste attualmente in esecuzione, è possibile digitare il comando seguente (NOTA: l'ID processo da usare per il comando get-item sarà diverso nel computer):

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

In alternativa, se si vuole vedere quanto tempo è già trascorso dall'avvio della richiesta:

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

Riepilogo

La conversione è stata completata. In questa procedura dettagliata si è appreso come eseguire una query sullo stato dei pool di applicazioni e dei siti IIS. Hai scoperto come avviarli e fermarli. Si è anche appreso come esaminare i processi di lavoro e le richieste attualmente in esecuzione.