Leaked source code of windows server 2003
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
' ' Copyright (c) Microsoft Corporation. All rights reserved. ' ' VBScript Source File ' ' Script Name: IIsApp.vbs '
Option Explicit On Error Resume Next
' Error codes Const ERR_OK = 0 Const ERR_GENERAL_FAILURE = 1
''''''''''''''''''''' ' Messages Const L_Gen_ErrorMessage = "%1 : %2" Const L_CmdLib_ErrorMessage = "Could not create an instance of the CmdLib object." Const L_ChkCmdLibReg_ErrorMessage = "Please register the Microsoft.CmdLib component." Const L_ScriptHelper_ErrorMessage = "Could not create an instance of the IIsScriptHelper object." Const L_ChkScpHelperReg_ErrorMessage = "Please, check if the Microsoft.IIsScriptHelper is registered." Const L_InvalidSwitch_ErrorMessage = "Invalid switch: %1" Const L_NotEnoughParams_ErrorMessage = "Not enough parameters." Const L_Query_ErrorMessage = "Error executing query" Const L_Serving_Message = "The following W3WP.exe processes are serving AppPool: %1" Const L_NoW3_ErrorMessage = "Error - no w3wp.exe processes are running at this time" Const L_PID_Message = "W3WP.exe PID: %1" Const L_NoResults_ErrorMessage = "Error - no results" Const L_APID_Message = "W3WP.exe PID: %1 AppPoolId: %2" Const L_NotW3_ErrorMessage = "ERROR: ProcessId specified is NOT an instance of W3WP.exe - EXITING" Const L_PIDNotValid_ErrorMessage = "ERROR: PID is not valid"
''''''''''''''''''''' ' Help Const L_Empty_Text = ""
' General help messages Const L_SeeHelp_Message = "Type IIsApp /? for help." Const L_Help_HELP_General01_Text = "Description: list IIS worker processes." Const L_Help_HELP_General02_Text = "Syntax: IIsApp.vbs [/a <app_pool_id> | /p <pid>]" Const L_Help_HELP_General04_Text = "Parameters:" Const L_Help_HELP_General05_Text = "" Const L_Help_HELP_General06_Text = "Value Description" Const L_Help_HELP_General07_Text = "/a <app_pool_id> report PIDs of currently running" Const L_Help_HELP_General08_Text = " w3wp.exe processes serving pool" Const L_Help_HELP_General09_Text = " <app_pool_id>. Surround <app_pool_id>" Const L_Help_HELP_General10_Text = " with quotes if it contains spaces." Const L_Help_HELP_General11_Text = " not specified by default and exclusive" Const L_Help_HELP_General12_Text = " to /p switch." Const L_Help_HELP_General13_Text = "/p <pid> report AppPoolId of w3wp specified by <pid>" Const L_Help_HELP_General14_Text = "DEFAULT: no switches will print out the PID and AppPoolId" Const L_Help_HELP_General15_Text = " for each w3wp.exe"
'''''''''''''''''''''''' ' Operation codes Const OPER_BY_NAME = 1 Const OPER_BY_PID = 2 Const OPER_ALL = 3
' ' Main block ' Dim oScriptHelper, oCmdLib Dim intOperation, intResult Dim strCmdLineOptions Dim oError Dim aArgs Dim apoolID, PID Dim oProviderObj
' Default intOperation = OPER_ALL Const wmiConnect = "winmgmts:{(debug)}:/root/cimv2" Const queryString = "select * from Win32_Process where Name='w3wp.exe'" Const pidQuery = "select * from Win32_Process where ProcessId="
' get NT WMI provider Set oProviderObj = GetObject(wmiConnect)
' Instantiate the CmdLib for output string formatting Set oCmdLib = CreateObject("Microsoft.CmdLib") If Err.Number <> 0 Then WScript.Echo L_CmdLib_ErrorMessage WScript.Echo L_ChkCmdLibReg_ErrorMessage WScript.Quit(ERR_GENERAL_FAILURE) End If Set oCmdLib.ScriptingHost = WScript.Application
' Instantiate script helper object Set oScriptHelper = CreateObject("Microsoft.IIsScriptHelper") If Err.Number <> 0 Then WScript.Echo L_ScriptHelper_ErrorMessage WScript.Echo L_ChkScpHelperReg_ErrorMessage WScript.Quit(ERR_GENERAL_FAILURE) End If
Set oScriptHelper.ScriptHost = WScript
' Check if we are being run with cscript.exe instead of wscript.exe oScriptHelper.CheckScriptEngine
' Command Line parsing Dim argObj, arg Set argObj = WScript.Arguments
strCmdLineOptions = "a:a:1;p:p:1"
If argObj.Named.Count > 0 Then Set oError = oScriptHelper.ParseCmdLineOptions(strCmdLineOptions)
If Not oError Is Nothing Then If oError.ErrorCode = oScriptHelper.ERROR_NOT_ENOUGH_ARGS Then ' Not enough arguments for a specified switch WScript.Echo L_NotEnoughParams_ErrorMessage WScript.Echo L_SeeHelp_Message Else ' Invalid switch oCmdLib.vbPrintf L_InvalidSwitch_ErrorMessage, Array(oError.SwitchName) WScript.Echo L_SeeHelp_Message End If WScript.Quit(ERR_GENERAL_FAILURE) End If
If oScriptHelper.GlobalHelpRequested Then DisplayHelpMessage WScript.Quit(ERR_OK) End If
For Each arg In oScriptHelper.Switches Select Case arg Case "a" apoolID = oScriptHelper.GetSwitch(arg) intOperation = OPER_BY_NAME Case "p" PID = oScriptHelper.GetSwitch(arg) intOperation = OPER_BY_PID End Select Next
End If
' Choose operation Select Case intOperation Case OPER_BY_NAME intResult = GetByPool(apoolID) Case OPER_BY_PID intResult = GetByPid(PID)
Case OPER_ALL intResult = GetAllW3WP() End Select
' Return value to command processor WScript.Quit(intResult)
''''''''''''''''''''''''' ' End Of Main Block '''''''''''''''''''''
''''''''''''''''''''''''''' ' DisplayHelpMessage ''''''''''''''''''''''''''' Sub DisplayHelpMessage() WScript.Echo L_Help_HELP_General01_Text WScript.Echo L_Empty_Text WScript.Echo L_Help_HELP_General02_Text WScript.Echo L_Empty_Text WScript.Echo L_Help_HELP_General04_Text WScript.Echo L_Help_HELP_General05_Text WScript.Echo L_Help_HELP_General06_Text WScript.Echo L_Help_HELP_General07_Text WScript.Echo L_Help_HELP_General08_Text WScript.Echo L_Help_HELP_General09_Text WScript.Echo L_Help_HELP_General10_Text WScript.Echo L_Help_HELP_General11_Text WScript.Echo L_Help_HELP_General12_Text WScript.Echo L_Help_HELP_General13_Text WScript.Echo L_Empty_Text WScript.Echo L_Help_HELP_General14_Text WScript.Echo L_Help_HELP_General15_Text End Sub
Function GetAppPoolId(strArg) Dim Submatches Dim strPoolId Dim re Dim Matches
On Error Resume Next
Set re = New RegExp re.Pattern = "-ap ""(.+)""" re.IgnoreCase = True Set Matches = re.Execute(strArg) Set SubMatches = Matches(0).Submatches strPoolId = Submatches(0) GetAppPoolId = strPoolId End Function
Function GetByPool(strPoolName) Dim W3WPList Dim strQuery Dim W3WP
On Error Resume Next
strQuery = queryString Set W3WPList = oProviderObj.ExecQuery(strQuery) If (Err.Number <> 0) Then WScript.Echo L_Query_ErrorMessage oCmdLib.vbPrintf L_Gen_ErrorMessage, Array(Hex(Err.Number), Err.Description) GetByPid = 2 Else oCmdLib.vbPrintf L_Serving_Message, Array(strPoolName) If (W3WPList.Count < 1) Then WScript.Echo L_NoW3_ErrorMessage GetByPool = 1 Else For Each W3WP In W3WPList If (UCase(GetAppPoolId(W3WP.CommandLine)) = UCase(strPoolName)) Then oCmdLib.vbPrintf L_PID_Message, Array(W3WP.ProcessId) End If Next GetByPool = 0 End If End If End Function
Function GetByPid(pid) Dim W3WPList Dim strQuery Dim W3WP
On Error Resume Next
If (IsNumeric(pid)) Then strQuery = pidQuery & pid Set W3WPList = oProviderObj.ExecQuery(strQuery) If (Err.Number <> 0) Then WScript.Echo L_Query_ErrorMessage oCmdLib.vbPrintf L_Gen_ErrorMessage, Array(Hex(Err.Number), Err.Description) GetByPid = 2 Else If (W3WPList.Count < 1) Then WScript.Echo L_NoResults_ErrorMessage GetByPid = 2 Else For Each W3WP In W3WPList If (W3WP.Name = "w3wp.exe") Then oCmdLib.vbPrintf L_APID_Message, Array(pid, GetAppPoolId(W3WP.CommandLine)) GetByPid = 0 Else WScript.Echo(L_NotW3_ErrorMessage) GetByPid = 2 End If Next End If End If Else WScript.Echo(L_PIDNotValid_ErrorMessage) GetByPid = 2 End If End Function Function GetAllW3WP() Dim W3WPList Dim strQuery Dim W3WP
On Error Resume Next
strQuery = queryString Set W3WPList = oProviderObj.ExecQuery(strQuery) If (Err.Number <> 0) Then WScript.Echo L_Query_ErrorMessage oCmdLib.vbPrintf L_Gen_ErrorMessage, Array(Hex(Err.Number), Err.Description) GetByPid = 2 Else If (W3WPList.Count < 1) Then WScript.Echo L_NoResults_ErrorMessage GetAllW3WP = 2 Else For Each W3WP In W3WPList oCmdLib.vbPrintf L_APID_Message, Array(W3WP.ProcessId, GetAppPoolId(W3WP.CommandLine)) Next GetAllW3WP = 0 End If End If End Function
|