Condividi tramite


Snap-in di PowerShell: dati di runtime

di Thomas Deml

Le procedure dettagliate precedenti illustrano come eseguire query e modificare le impostazioni di configurazione di IIS. Esiste tuttavia un'area inesplorata: dati in fase di esecuzione.

Introduzione

Le cose cambiano, IIS non è diverso. I siti vengono avviati o arrestati, i pool di applicazioni vengono riciclati o vanno in timeout, le richieste arrivano e le risposte vengono inviate, i domini applicativi vengono creati o arrestati. IIS implementa un'interfaccia denominata RSCA (API di stato e controllo di runtime) che consente di monitorare le attività del sistema.

Lo snap-in di IIS PowerShell utilizza questa interfaccia ed espone alcuni dei suoi dati tramite lo spazio dei nomi dello snap-in di 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, come i processi di lavoro attualmente in esecuzione, le richieste attualmente in corso e gli AppDomains caricati, 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

Iniziamo eseguendo una query sullo stato dei nostri siti web.

Stato sito

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 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. Divertiamoci un po' con il prossimo esempio. 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

Riavvio di AppPools

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 accontentarsi di Restart-WebItem. Di seguito viene illustrato un po' l'esempio

  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. Consultazione del 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, affrontati successivamente 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 l'AppPool è stato riciclato con successo, l'ID processo dovrebbe essere stato modificato.

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

Processi e richieste di lavoro

Il cmdlet get-process non consente di capire quale pool di applicazioni serve 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 di 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 desidera 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 dopo l'avvio della richiesta:

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

Sommario

Fatto. 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.