schnarchzapfen 10 Geschrieben 23. Juni 2006 Melden Teilen Geschrieben 23. Juni 2006 Hallo, ich verwende in diversen Skripten die folgende Funktion zum auslesen der CPUZeit eines Processes: Function CPUTime(Processname) dim strComputer, objWMIService,colProcesses, objProcess,sngProcessTime strComputer = "." Set objWMIService = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") Set colProcesses = objWMIService.ExecQuery _ ("Select * from Win32_process") For Each objProcess in colProcesses if lcase(objProcess.Name) = lcase(Processname) then sngProcessTime = ( CSng(objProcess.KernelModeTime) + _ CSng(objProcess.UserModeTime)) / 10000000 'Wscript.echo objProcess.name & VbTab & sngProcessTime 'Wscript.echo objProcess.name & VbTab & FormatDateTime(sngProcessTime,vbLongTime) CPUTime = sngProcessTime exit function end if Next CPUTime = 0 end function Soweit sogut. Jedoch möchte ich nun gerne diese Funktion so erweitern, dass ich falls ein Process z.B. auf einem Terminal Server von mehreren Benutzern gleichzeitig geöffnet wird den Benutzernamen mit übergeben kann und mir die Funktion dann "nur" die CPUZeit des übergebenen Processes für diesen Benutzer zurückgibt. Hat jemand eine Idee wie man das realisieren könnte? Gruß Schnarchzapfen Zitieren Link zu diesem Kommentar
ZeroKnowledge 11 Geschrieben 23. Juni 2006 Melden Teilen Geschrieben 23. Juni 2006 Die Methode GetOwner() aus der Klasse Win32_Process sollte genau das sein was du suchst. Ich hab deine Funktion mal mit GetOwner() erweitert Function CPUTime(strProcessName, strUserName) strComputer = "." Set objWMIService = GetObject("winmgmts:" & _ "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") Set colProcesses = objWMIService.ExecQuery("SELECT * from Win32_Process") For Each objProcess In colProcesses If LCase(objProcess.Name) = LCase(strProcessName) Then Return = objProcess.GetOwner(strProcessOwner) If Return = 0 Then If LCase(strProcessOwner) = LCase(strUserName) Then sngProcessTime = ( CSng(objProcess.KernelModeTime) + CSng(objProcess.UserModeTime)) / 10000000 CPUTime = objProcess.Name & vbTab & strProcessOwner & vbTab & sngProcessTime Exit Function End If End If End If Next CPUTime = 0 End Function Zitieren Link zu diesem Kommentar
ZeroKnowledge 11 Geschrieben 24. Juni 2006 Melden Teilen Geschrieben 24. Juni 2006 Ich hab da in der Funktion einen Teil vergessen wieder zu ändern In Zeile 14 sollte es CPUTime = sngProcessTime statt CPUTime = objProcess.Name & vbTab & strProcessOwner & vbTab & sngProcessTime heißen Zitieren Link zu diesem Kommentar
schnarchzapfen 10 Geschrieben 26. Juni 2006 Autor Melden Teilen Geschrieben 26. Juni 2006 @ZeroKnowLedge: Danke für die Erweiterung meiner Funktion. Genau das habe ich gesucht. Eine kleine Frage habe ich jedoch noch und zwar ist mir aufgefallen, dass der "Microsoft Script Editior", mit dem ich meine Skripte normalerweise bearbeite, die Variable "Return" blau hinterlegt was normalerweise so viel bedeutet wie, dass es sich bei diesem Wort um einen reservierten VB-Befehl handelt. Kann ich die Variable "Return" hier dennoch verweden? Zitieren Link zu diesem Kommentar
ZeroKnowledge 11 Geschrieben 26. Juni 2006 Melden Teilen Geschrieben 26. Juni 2006 Laut VBScript-Handbuch/-Hilfe ist "return" nur bei JScript ein reserviertes Wort. Damit es aber zu keinen Problemen kommt, kannst du für das return auch jede andere Variable hinschreiben. Wie wärs denn z.B. mit ErrorCode (was sogar eher dem Rückgabewert der Methode entspricht als ein "allgemeines" return...) Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.