原文連結:PowerShell Provider: Run-time Data
介紹
站點的啟動,停止, 應用程式池的回後或過期(time out), 接受的請求和傳送的響應, AppDomains(應用程式域) 的大量
生成和關閉. IIS7 實現了一個所謂的 RSCA 介面(run-time state and control API) ,該介面允許您監視當前系統正在做的
工作.
IIS 7.0 PowerShell Provider 使用該介面並以IIS Provider 名空間來暴露其中一些資料資訊. 通過Get-WebItemState,
Start-WebItem, Stop-WebItem 和 Restart-WebItem 等cmdlets來配置站點和應用程式池的狀態. 通過IIS 名空間來暴露
出來的執行時狀態比如:當前執行的工作者程式,當前執行的請求和被載入的應用程式域(loaded AppDomains )等.
本文使用的站點, applications 和虛擬目錄在前一篇文章中已進行了建立.
站點和應用程式池狀態
開始查詢web站點的狀態.
站點狀態
PS IIS:\Sites> Get-WebItemState IIS:\Sites\DemoSite
Started
使用 Stop-WebItem cmdlet 來停止站點:
PS IIS:\Sites> Get-WebItemState IIS:\Sites\DemoSite
Stopped
當然,啟動站點的工作也差不多:
PS IIS:\Sites> Get-WebItemState IIS:\sites\DemoSite
Started
應用程式池狀態
我們對應用程式池也施加相同操作:
PS IIS:\AppPools> Get-WebItemState DemoAppPool
Started
PS IIS:\AppPools> Stop-WebItem DemoAppPool
PS IIS:\AppPools> Get-WebItemState DemoAppPool
Stopped
除此之外,您也可從 AppPools 結點中獲取這些狀態屬性. 下面我們做一個有趣的例子. 開啟喇叭(電腦的聲音)並執行
下面命令列(注:此時系統會用語音方式提示應用程式池被啟動):
現在再次程式 DemoAppPool :
回收應用程式池
應用程式池的不同之處(與站點等相比)在於它們可以被回收(recycled). 執行這個任務的 cmdlet 是:
Restart-WebItem (不是Recycle-WebItem). PowerShell 有著非常嚴格的命名規則,因此我們須使用
Restart-WebItem. 我們使用下面內容來擴充套件一下我們的例子:
- 建立一個對 'Default Web Site' 站頁預設頁面的請求
- 查詢處理當前請求的工作者程式(worker process )的 PID
- 回收該應用程式池
- 再次請求這個PID 以確保該程式被重啟
1. 請求預設頁面
我們使用Net.WebClient 類去請求 http://localhost/. 這裡不再顯示輸出資訊,取而代之的僅是檢視一
下當前響應內容的長度.
PS IIS:\AppPools> $response.Length
689
2. 查詢工作者程式(Worker Process) PID
假設當前機器上沒有其他正在執行的站點和應用,下面的命令列僅會返回一個:
ProcessName Id
----------- --
w3wp 3684
There is a better way to get to worker processes, handled a little later in this walkthrough.
3. 回收應用程式池
我們使用 Restart-WebItem cmdlet 來回疏通應用程式池:
4. 查詢工作者程式的 PID
如果成功地回收了應用程式,那麼您的程式ID就會發生變化.
ProcessName Id
----------- --
w3wp 5860
工作者處理和請求(Worker Processes and Requests)
get-process cmdlet 不會找出當前工作者程式執行著那個應用程式池. 然而下面的方式可做到這一點:
processId Handles state StartTime
--------- ------- ----- ---------
6612 326 1 3/28/2008 12:20:27 PM
當前正在執行的請求(Currently Executing Requests)
注:下面的內容我實在是看不明白,所以直接將E文帖在這裡,希望理解的朋友將內容發上來以便我及時更正。
如果想要顯示當前正在執行的請求,您可以使用如下命令列 (注:get-item 命令所使用的進行ID會與您本機
上的有所不同):
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)
requestId : d8000001800000f5
connectionId : d8000001600000f3
verb : GET
url : /long.aspx
siteId : 1
如果您想檢視從執行請求開始到現在已過了多長時間的話:
url timeElapsed
--- -----------
/long.aspx 2637
總結
在本文中,您瞭解瞭如何檢視 IIS 應用程式池和站點的狀態. 如何啟動和關閉它們. 您也瞭解瞭如何檢視工作者
程式(worker processes)以及當前執行的請求.
好了,今天的內容就到這裡。
原文連結:http://www.cnblogs.com/daizhj/archive/2008/12/11/1352718.html
作者: daizhj, 代震軍
Tags: powershell,iis