実行中の HTTP リクエストの情報を表示する方法 (IIS WMI)
手順としては WorkerProcess オブジェクトを取得し、 それの GetExecutingRequests メソッドを呼ぶことにより、 現在実行中の HTTP リクエストに対応する HttpRequest オブジェクトを取得可能です。
下の例では SELECT * FROM WorkerProcess の結果を For Each することによってそれぞれの WorkerProcess に対する処理を行っています。
ただ、ワーカープロセスが存在しないときに For Each を呼ぶと Invalid pointer というエラーが発生してしまったので、あまり使いたくなかったのですが、On Error Resume Next で処理を流し、 Err オブジェクトをチェックすることで成否を確認しています。
On Error Resume Next Set oWebAdmin = GetObject("winmgmts:root\WebAdministration") Set oW3WPs = oWebAdmin.ExecQuery( "SELECT * FROM WorkerProcess" ) For Each oW3WP In oW3WPs If Err.Number <> 0 Then If Err.Number = -2147467261 Then WScript.Echo "実行中のリクエストはありません。(ワーカープロセス未起動)" Else WScript.Echo "不明のエラーです。" + CStr( Err.Number ) End If Exit For End If oW3WP.GetExecutingRequests arrReqs If IsNull(arrReqs) Then WScript.Echo "実行中のリクエストはありません。" Else WScript.Echo "現在実行中のリクエスト数: " + CStr( UBound(arrReqs) + 1 ) WScript.Echo "" For Each oRequest In arrReqs WScript.Echo "ClientIPAddress: " + oRequest.ClientIPAddress WScript.Echo "ConnectionId: " + oRequest.ConnectionId WScript.Echo "CurrentModule: " + oRequest.CurrentModule WScript.Echo "GUID: " + NullSafeCStr( oRequest.GUID ) WScript.Echo "HostName: " + oRequest.HostName WScript.Echo "LocalIPAddress: " + oRequest.LocalIPAddress WScript.Echo "LocalPort: " + NullSafeCStr( oRequest.LocalPort ) WScript.Echo "PipelineState: " + NullSafeCStr( oRequest.PipelineState ) WScript.Echo "Site ID: " + NullSafeCStr( oRequest.SiteID ) WScript.Echo "TimeElapsed: " + NullSafeCStr( oRequest.TimeElapsed ) WScript.Echo "TimeInModule: " + NullSafeCStr( oRequest.TimeInModule ) WScript.Echo "TimeInState: " + NullSafeCStr( oRequest.TimeInState ) WScript.Echo "Url: " + oRequest.Url WScript.Echo "Verb: " + oRequest.Verb WScript.Echo "" Next End If Next Function NullSafeCStr( o ) If IsNull( o ) Then NullSafeCStr = "(null)" Else NullSafeCStr = CStr( o ) End If End Function
上記のスクリプトを enum_req.vbs という名前で保存し、実行した結果は以下のようになります。
> cscript enum_req.vbs
Microsoft (R) Windows Script Host Version 5.7
Copyright (C) Microsoft Corporation. All rights reserved.
現在実行中のリクエスト数: 1
ClientIPAddress: ::1
ConnectionId: fc000001600001a9
CurrentModule: ManagedPipelineHandler
GUID: (null)
HostName: localhost
LocalIPAddress: ::1
LocalPort: 8080
PipelineState: 128
Site ID: 1
TimeElapsed: 3276
TimeInModule: 3011
TimeInState: 3011
Url: /vdir/test1.aspx
Verb: GET