VBS Taskkill PID
Hallo zusammen, ich habe ein kleines Problem mit einem VBS Script.
Aktuell möchte ich ein Script zum neustarten einiger Prozesse schreiben, welches einen Prozess terminiert und anschließend wieder startet. Jedoch komme ich beim Befehl für den Taskkill nicht weiter.
Das Skript beendet den Prozess nicht und es wird auch keine Fehlermeldung ausgegeben...
Wenn ich jetzt den Kommentar bei "Test..." entferne und die PID (die ich ja weiß) manuell vergebe, wird der Prozess wie gewünscht beendet.
Auffällig ist, das es so keine sichtbaren Unterschiede zwsichen der automatisch befüllten Varriable PID (mit der PID aus der TXT Datei) und der manuell angegeben Varriable PID gibt.
Beide haben den selben Typ, beide sind gleich lang, beide haben den selben Inhalt.
Warum funktioniert es bei der manuellen Eingabe, nicht jedoch bei dem automatischen Übernehmen der PID aus der TXT... ich verstehe es einfach nicht.
Vielleicht übersehe ich auch nur etwas naja... hoffe ihr könnt mir weiter helfen
Das Skript soll in einer Windows Umgebung ausgeführt werden. (Dort später (je nach Prozess) auf Windows 7 und Windows Server 2k8 R2.)
Gruß
Dante Gabriel
Aktuell möchte ich ein Script zum neustarten einiger Prozesse schreiben, welches einen Prozess terminiert und anschließend wieder startet. Jedoch komme ich beim Befehl für den Taskkill nicht weiter.
Code
' Definitionen
Dim Dateisystem, Textdatei1, Path_Textdatei1, PID1, taks_kill
Dim oShell
' Hole die aktuelle PIT
Path_Textdatei1 = "c:\PFAD_ZUR_DATEI\pid.txt"
Set Dateisystem = CreateObject("Scripting.FileSystemObject")
Set Textdatei1 = Dateisystem.OpenTextFile(Path_Textdatei1)
PID1 = Textdatei1.ReadAll
' Schneide den Rest des Strings ab, der nicht zur Pid gehört.
' Mid (Datei,Anfang,Anzahl Zeichen)
PID1 = CStr(Mid(PID1,5,Len(PID1)-5))
'Test bekannte PID manuell setzten
' PID1 = "3536"
' Beende Prozesse
Set oShell = CreateObject("WScript.Shell")
oShell.Run("taskkill /f /PID "+CStr(PID1))
Problemstellung
Das Skript beendet den Prozess nicht und es wird auch keine Fehlermeldung ausgegeben...
Wenn ich jetzt den Kommentar bei "Test..." entferne und die PID (die ich ja weiß) manuell vergebe, wird der Prozess wie gewünscht beendet.
Auffällig ist, das es so keine sichtbaren Unterschiede zwsichen der automatisch befüllten Varriable PID (mit der PID aus der TXT Datei) und der manuell angegeben Varriable PID gibt.
Beide haben den selben Typ, beide sind gleich lang, beide haben den selben Inhalt.
Warum funktioniert es bei der manuellen Eingabe, nicht jedoch bei dem automatischen Übernehmen der PID aus der TXT... ich verstehe es einfach nicht.
Vielleicht übersehe ich auch nur etwas naja... hoffe ihr könnt mir weiter helfen
Umgebung
Das Skript soll in einer Windows Umgebung ausgeführt werden. (Dort später (je nach Prozess) auf Windows 7 und Windows Server 2k8 R2.)
Gruß
Dante Gabriel
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 264998
Url: https://administrator.de/contentid/264998
Ausgedruckt am: 22.11.2024 um 17:11 Uhr
8 Kommentare
Neuester Kommentar
Du hast 100% einen unsichtbaren Zeilenumbruch in deinem String
Ich würde das killen stattdessen mit WMI machen
Gruß jodel32
PID1 = Textdatei1.ReadLine
PID1 = Trim(Mid(PID1,5))
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
Set colProcessList = objWMIService.ExecQuery("Select * from Win32_Process Where ProcessID = '3536'")
For Each objProcess in colProcessList
objProcess.Terminate()
Next
Wobei ich es trotzdem komisch finde, warum das ganze über Shell.Run nicht so ganz funktioniert...
Siehe Ergänzung oben ... "Zeilenumbruch" Path_Textdatei1 = "c:\PFAD_ZUR_DATEI\pid.txt"
Set Dateisystem = CreateObject("Scripting.FileSystemObject")
Set content = Dateisystem.OpenTextFile(Path_Textdatei1,1).ReadAll()
set regex = CreateObject("vbscript.regexp")
regex.Pattern = "\d+"
set matches = regex.Execute(Content)
if matches.Count > 0 then
PID1 = matches(0)
oShell.Run "taskkill /f /PID " & PID1,0,True
End if
Trim kann so wie aussieht das Leerzeichen am Ende nicht entfernen
Doch natürlich kann es wenn es denn tatsächlich ein Leerzeichen und kein Tab etc. ist ... http://www.w3schools.com/vbscript/func_trim.aspWie gesagt ohne exakten Output deiner Textdatei .....damit wäre das ein klax und sofort gelöst
File in einem anderen Format (UTF8 / etc )?
ja durch den Regex Eintrag aus der TXT ausgelesen
wie du siehst zuverlässiger damit bin ich mir 100% sicher das nur Digits reinkommen.Und bei deiner Methode musst du die ja die Länge vorher wissen ....