共用方式為


PowerShell 嵌入式管理單元:執行時間資料

作者 :Thomas Deml

先前的逐步解說示範如何查詢和變更 IIS 組態設定。 不過,還有一個未探索的區域:執行時間資料。

簡介

變更時,IIS 並無不同。 網站啟動或停止、應用程式集區回收或逾時、要求會傳入並收到回應、AppDomains 繁衍或關閉。 IIS 會實作稱為 RSCA 的介面, (執行時間狀態和控制 API) ,可讓您監視系統中的發生狀況。

IIS PowerShell 嵌入式管理單元會使用此介面,並透過 IIS 嵌入式管理單元命名空間公開其部分資料。 網站和應用程式集區的狀態可透過 Get-WebItemState、Start-WebItem、Stop-WebItem 和 Restart-WebItem Cmdlet 來設定。 執行時間狀態,例如目前正在執行的背景工作進程、目前正在執行的要求和載入的 AppDomains 會透過 IIS 命名空間公開。

本逐步解說會使用先前逐步解說中建立的網站、應用程式和虛擬目錄。

月臺和應用程式集區狀態

我們會從查詢網站的狀態開始。

站台狀態

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

您可以使用 Stop-WebItem Cmdlet 來停止 DemoSite:

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

開始的運作方式相同:

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

AppPool 狀態

我們想要針對應用程式集區執行相同的動作

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

但您也可以在 AppPools 節點上讀取狀態屬性。 讓我們來看看下一個範例。 開啟喇叭並執行下列命令:

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

現在再次啟動 DemoAppPool:

PS IIS:\AppPools> Start-WebItem DemoAppPool

回收 AppPools

AppPools 的其中一個差異是可以回收。 回收 AppPools 的 Cmdlet 稱為 Restart-WebItem,而不是 Recycle-WebItem。 PowerShell 有相當嚴格的命名規則,我們必須解決 Restart-WebItem。 讓我們稍微展開此範例

  1. 對 「預設網站」的預設頁面提出要求。
  2. 查詢背景工作進程的 PID 是處理要求。
  3. 回收應用程式集區。
  4. 再次要求 PID 以確認進程已重新開機。

1.要求預設頁面

我們使用 Net.WebClient 類別來要求 http://localhost/ 。 我們不會在畫面上顯示輸出,而是只查看回應的長度。

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

2.查詢背景工作進程 PID

假設您的電腦上沒有其他作用中的網站和應用程式,下列命令應該只會傳回一個 PID:

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

有更好的方法可取得背景工作進程,稍後在本逐步解說中處理。

3.回收應用程式集區

我們會使用 Restart-WebItem Cmdlet 來回收應用程式集區:

PS IIS:\AppPools> Restart-WebItem DefaultAppPool

4.查詢背景工作進程 PID

如果 AppPool 已成功回收,您的進程識別碼應該已經變更。

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

背景工作進程和要求

get-process Cmdlet 無法協助您找出特定背景工作進程正在提供的應用程式集區。 不過,這可以輕鬆地完成:

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

目前正在執行的要求

如果您的機器不是生產電腦,您很難查看目前正在執行的要求。 要求會很長,直到您透過 Internet Explorer 提出要求並回到 PowerShell 主控台為止。 以下是一些協助程式;需要很長時間的要求。

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

如果您想要查看目前正在執行的要求,可以在下列命令 (注意:您必須用於 get-item 命令的進程識別碼將會在您的電腦) 不同:

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

或者,如果您想要查看自啟動要求以來已經過多少時間:

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

總結

大功告成。 在本逐步解說中,您已瞭解如何查詢 IIS 應用程式集區和月臺的狀態。 您已瞭解如何啟動和停止它們。 您也瞭解如何查看背景工作進程和目前正在執行的要求。