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ù
- Effettuare una richiesta alla pagina predefinita del "Sito Web predefinito".
- L'esecuzione di query sul PID del processo di lavoro è la gestione della richiesta.
- Riciclo del pool di applicazioni.
- 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.