Windows services sInfo,“全部”) _阵列显示($aServicesInfo) ;=============================================================================== ; 描述:返回数组中的服务
sInfo,“全部”) _阵列显示($aServicesInfo) ;=============================================================================== ; 描述:返回数组中的服务信息。 ; 参数:$aServicesInfo-按引用-服务信息数组。 ; $sState-可选-接受值“全部”或“停止”或 ; '跑步' ; 要求:无 ; 返回值:成功时-返回服务信息数组。 ; $aServicesInfo[$i][0]=名称 ; $aServicesInfo[$i][1]=接受暂停 ; $aServicesInfo[$i][2]=接受停止 ; $aServicesInfo[$i][3]=检查点 ; $aServicesInfo[$i][4]=说明 ; $aServicesInfo[$i][5]=创建类名 ; $aServicesInfo[$i][6]=桌面交互 ; $aServicesInfo[$i][7]=显示名称 ; $aServicesInfo[$i][8]=错误控制 ; $aServicesInfo[$i][9]=退出代码 ; $aServicesInfo[$i][10]=路径名 ; $aServicesInfo[$i][11]=进程ID ; $aServicesInfo[$i][12]=特定于服务的退出代码 ; $aServicesInfo[$i][13]=服务类型 ; $aServicesInfo[$i][14]=已启动 ; $aServicesInfo[$i][15]=启动模式 ; $aServicesInfo[$i][16]=开始名称 ; $aServicesInfo[$i][17]=状态 ; $aServicesInfo[$i][18]=状态 ; $aServicesInfo[$i][19]=系统创建类名 ; $aServicesInfo[$i][20]=系统名称 ; $aServicesInfo[$i][21]=标签ID ; $aServicesInfo[$i][22]=等待提示 ; ; 失败时-@error=1并返回0 ; @extended=1-数组不包含任何信息 ; 2-$colItems不是对象 ; 作者:Jarvis Stubblefield(在Vortex Revolutions.com上支持) ; 注: ;=============================================================================== Func_ComputerGetServices(ByRef$aServicesInfo,$sState=“All”) 本地$cI_Compname=@ComputerName,$WBEMFlagReturnInstant=0x10,$wbemFlagForwardOnly=0x20 本地$colItems、$objWMIService、$objItem Dim$aServicesInfo[1][23],$i=1 $objWMIService=ObjGet(“winmgmts:\\”和$cI\u Compname&“\root\CIMV2”) $colItems=$objWMIService.ExecQuery(“从Win32_服务中选择*,”WQL“,$WBEMFlagReturnInstant+$wbemFlagForwardOnly) 如果IsObj($colItems),则 以$colItems表示的$objItem 如果$sState“All”,则 如果$sState=“Stopped”和$objItem.State“Stopped”,则继续操作 如果$sState=“Running”和$objItem.State“Running”,则继续运行 恩迪夫 ReDim$aServicesInfo[UBound$aServicesInfo)+1][23] $aServicesInfo[$i][0]=$objItem.Name $aServicesInfo[$i][1]=$objItem.AcceptPause $aServicesInfo[$i][2]=$objItem.AcceptStop $aServicesInfo[$i][3]=$objItem.CheckPoint $aServicesInfo[$i][4]=$objItem.Description $aServicesInfo[$i][5]=$objItem.CreationClassName $aServicesInfo[$i][6]=$objItem.DesktopInteract $aServicesInfo[$i][7]=$objItem.DisplayName $aServicesInfo[$i][8]=$objItem.ErrorControl $aServicesInfo[$i][9]=$objItem.ExitCode $aServicesInfo[$i][10]=$objItem.PathName $aServicesInfo[$i][11]=$objItem.ProcessId $aServicesInfo[$i][12]=$objItem.servicesspecificeexitcode $aServicesInfo[$i][13]=$objItem.ServiceType $aServicesInfo[$i][14]=$objItem.Started $aServicesInfo[$i][15]=$objItem.StartMode $aServicesInfo[$i][16]=$objItem.StartName $aServicesInfo[$i][17]=$objItem.State $aServicesInfo[$i][18]=$objItem.Status $aServicesInfo[$i][19]=$objItem.SystemCreationClassName $aServicesInfo[$i][20]=$objItem.SystemName $aServicesInfo[$i][21]=$objItem.TagId $aServicesInfo[$i][22]=$objItem.WaitHint $i+=1 下一个 $aServicesInfo[0][0]=UBound($aServicesInfo)-1 如果$aServicesInfo[0][0]<1,则 设置错误(1,1,0) 恩迪夫 其他的 设置错误(1、2、0) 恩迪夫 EndFunc;==>_计算机服务Windows services sInfo,“全部”) _阵列显示($aServicesInfo) ;=============================================================================== ; 描述:返回数组中的服务,windows-services,autoit,windows-server,windows-task-scheduler,Windows Services,Autoit,Windows Server,Windows Task Scheduler,sInfo,“全部”) _阵列显示($aServicesInfo) ;=============================================================================== ; 描述:返回数组中的服务信息。 ; 参数:$aServicesInfo-按引用-服务信息数组。 ; $sState-可选-接受值“全部”或“停止”或 ; '
#include <array.au3>; Only for _ArrayDisplay()
$avProcProps = _ProcessListProperties()
_ArrayDisplay($avProcProps, "$avProcProps")
;===============================================================================
; Function Name: _ProcessListProperties()
; Description: Get various properties of a process, or all processes
; Call With: _ProcessListProperties( [$Process [, $sComputer]] )
; Parameter(s): (optional) $Process - PID or name of a process, default is all
; (optional) $sComputer - remote computer to get list from, default is local
; Requirement(s): AutoIt v3.2.4.9+
; Return Value(s): On Success - Returns a 2D array of processes, as in ProcessList()
; with additional columns added:
; [0][0] - Number of processes listed (can be 0 if no matches found)
; [1][0] - 1st process name
; [1][1] - 1st process PID
; [1][2] - 1st process Parent PID
; [1][3] - 1st process owner
; [1][4] - 1st process priority (0 = low, 31 = high)
; [1][5] - 1st process executable path
; [1][6] - 1st process CPU usage
; [1][7] - 1st process memory usage
; [1][8] - 1st process creation date/time = "MM/DD/YYY hh:mm:ss" (hh = 00 to 23)
; ...
; [n][0] thru [n][8] - last process properties
; On Failure: Returns array with [0][0] = 0 and sets @Error to non-zero (see code below)
; Author(s): PsaltyDS at http://www.autoitscript.com/forum
; Date/Version: 05/05/2008 -- v1.0.0
; Notes: If a numeric PID or string process name is provided and no match is found,
; then [0][0] = 0 and @error = 0 (not treated as an error, same as ProcessList)
; This function requires admin permissions to the target computer.
; All properties come from the Win32_Process class in WMI.
;===============================================================================
Func _ProcessListProperties($Process = "", $sComputer = ".")
Local $sUserName, $sMsg, $sUserDomain, $avProcs
If $Process = "" Then
$avProcs = ProcessList()
Else
$avProcs = ProcessList($Process)
EndIf
; Return for no matches
If $avProcs[0][0] = 0 Then Return $avProcs
; ReDim array for additional property columns
ReDim $avProcs[$avProcs[0][0] + 1][9]
; Connect to WMI and get process objects
$oWMI = ObjGet("winmgmts:{impersonationLevel=impersonate}!\\" & $sComputer & "\root\cimv2")
If IsObj($oWMI) Then
; Get collection of all processes from Win32_Process
$colProcs = $oWMI.ExecQuery("select * from win32_process")
If IsObj($colProcs) Then
; For each process...
For $oProc In $colProcs
$sObjName = ObjName($oProc, 1)
If @error Then ContinueLoop; Skip if process no longer exists
; Find it in the array
For $n = 1 To $avProcs[0][0]
If $avProcs[$n][1] = $oProc.ProcessId Then
; [n][2] = Parent PID
$avProcs[$n][2] = $oProc.ParentProcessId
; [n][3] = Owner
If $oProc.GetOwner($sUserName, $sUserDomain) = 0 Then $avProcs[$n][3] = $sUserDomain & "\" & $sUserName
; [n][4] = Priority
$avProcs[$n][4] = $oProc.Priority
; [n][5] = Executable path
$avProcs[$n][5] = $oProc.ExecutablePath
; [n][8] = Creation date/time
Local $dtmDate = $oProc.CreationDate
If $dtmDate <> "" Then
$dtmDate = StringMid($dtmDate, 5, 2) & "/" & _
StringMid($dtmDate, 7, 2) & "/" & _
StringLeft($dtmDate, 4) & " " & _
StringMid($dtmDate, 9, 2) & ":" & _
StringMid($dtmDate, 11, 2) & ":" & _
StringMid($dtmDate, 13, 2)
EndIf
$avProcs[$n][8] = $dtmDate
ExitLoop
EndIf
Next
Next
Else
SetError(2); Error getting process collection from WMI
EndIf
; Get collection of all processes from Win32_PerfFormattedData_PerfProc_Process
; Have to use an SWbemRefresher to pull the collection, or all Perf data will be zeros
Local $oRefresher = ObjCreate("WbemScripting.SWbemRefresher")
$colProcs = $oRefresher.AddEnum($oWMI, "Win32_PerfFormattedData_PerfProc_Process" ).objectSet
$oRefresher.Refresh
; Time delay before calling refresher
Local $iTime = TimerInit()
Do
Sleep(10)
Until TimerDiff($iTime) > 100
$oRefresher.Refresh
; Get PerfProc data
For $oProc In $colProcs
; Find it in the array
For $n = 1 To $avProcs[0][0]
If $avProcs[$n][1] = $oProc.IDProcess Then
; [n][6] = CPU usage
$avProcs[$n][6] = $oProc.PercentProcessorTime
; [n][7] = memory usage
$avProcs[$n][7] = $oProc.WorkingSet
ExitLoop
EndIf
Next
Next
Else
SetError(1); Error connecting to WMI
EndIf
; Return array
Return $avProcs
EndFunc ;==>_ProcessListProperties
Global $aServicesInfo
_ComputerGetServices($aServicesInfo, "All")
_ArrayDisplay($aServicesInfo)
;===============================================================================
; Description: Returns the services information in an array.
; Parameter(s): $aServicesInfo - By Reference - Services Information array.
; $sState - OPTIONAL - Accepted values 'All' or 'Stopped' or
; 'Running'
; Requirement(s): None
; Return Value(s): On Success - Returns array of Services Information.
; $aServicesInfo[$i][0] = Name
; $aServicesInfo[$i][1] = Accept Pause
; $aServicesInfo[$i][2] = Accept Stop
; $aServicesInfo[$i][3] = Check Point
; $aServicesInfo[$i][4] = Description
; $aServicesInfo[$i][5] = Creation Class Name
; $aServicesInfo[$i][6] = Desktop Interact
; $aServicesInfo[$i][7] = Display Name
; $aServicesInfo[$i][8] = Error Control
; $aServicesInfo[$i][9] = Exit Code
; $aServicesInfo[$i][10] = Path Name
; $aServicesInfo[$i][11] = Process ID
; $aServicesInfo[$i][12] = Service Specific Exit Code
; $aServicesInfo[$i][13] = Service Type
; $aServicesInfo[$i][14] = Started
; $aServicesInfo[$i][15] = Start Mode
; $aServicesInfo[$i][16] = Start Name
; $aServicesInfo[$i][17] = State
; $aServicesInfo[$i][18] = Status
; $aServicesInfo[$i][19] = System Creation Class Name
; $aServicesInfo[$i][20] = System Name
; $aServicesInfo[$i][21] = Tag ID
; $aServicesInfo[$i][22] = Wait Hint
;
; On Failure - @error = 1 and Returns 0
; @extended = 1 - Array contains no information
; 2 - $colItems isnt an object
; Author(s): Jarvis Stubblefield (support "at" vortexrevolutions "dot" com)
; Note(s):
;===============================================================================
Func _ComputerGetServices(ByRef $aServicesInfo, $sState = "All")
Local $cI_Compname = @ComputerName, $wbemFlagReturnImmediately = 0x10, $wbemFlagForwardOnly = 0x20
Local $colItems, $objWMIService, $objItem
Dim $aServicesInfo[1][23], $i = 1
$objWMIService = ObjGet("winmgmts:\\" & $cI_Compname & "\root\CIMV2")
$colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_Service", "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
If IsObj($colItems) Then
For $objItem In $colItems
If $sState <> "All" Then
If $sState = "Stopped" And $objItem.State <> "Stopped" Then ContinueLoop
If $sState = "Running" And $objItem.State <> "Running" Then ContinueLoop
EndIf
ReDim $aServicesInfo[UBound($aServicesInfo) + 1][23]
$aServicesInfo[$i][0] = $objItem.Name
$aServicesInfo[$i][1] = $objItem.AcceptPause
$aServicesInfo[$i][2] = $objItem.AcceptStop
$aServicesInfo[$i][3] = $objItem.CheckPoint
$aServicesInfo[$i][4] = $objItem.Description
$aServicesInfo[$i][5] = $objItem.CreationClassName
$aServicesInfo[$i][6] = $objItem.DesktopInteract
$aServicesInfo[$i][7] = $objItem.DisplayName
$aServicesInfo[$i][8] = $objItem.ErrorControl
$aServicesInfo[$i][9] = $objItem.ExitCode
$aServicesInfo[$i][10] = $objItem.PathName
$aServicesInfo[$i][11] = $objItem.ProcessId
$aServicesInfo[$i][12] = $objItem.ServiceSpecificExitCode
$aServicesInfo[$i][13] = $objItem.ServiceType
$aServicesInfo[$i][14] = $objItem.Started
$aServicesInfo[$i][15] = $objItem.StartMode
$aServicesInfo[$i][16] = $objItem.StartName
$aServicesInfo[$i][17] = $objItem.State
$aServicesInfo[$i][18] = $objItem.Status
$aServicesInfo[$i][19] = $objItem.SystemCreationClassName
$aServicesInfo[$i][20] = $objItem.SystemName
$aServicesInfo[$i][21] = $objItem.TagId
$aServicesInfo[$i][22] = $objItem.WaitHint
$i += 1
Next
$aServicesInfo[0][0] = UBound($aServicesInfo) - 1
If $aServicesInfo[0][0] < 1 Then
SetError(1, 1, 0)
EndIf
Else
SetError(1, 2, 0)
EndIf
EndFunc ;==>_ComputerGetServices