Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

VBScript unter beliebigem Prozessname ausführen

Anleitung Entwicklung VB for Applications

Mitglied: manuel-r

manuel-r (Level 3) - Jetzt verbinden

18.07.2012 um 22:25 Uhr, 6320 Aufrufe, 2 Kommentare, 3 Danke

Guten Abend alle zusammen

Schön des öfteren habe ich mich darüber etwas geärgert, dass alle laufenden VBScripte im Taskmanager nur als wscript.exe oder cscript.exe aufgeführt sind statt einen aussagekräftigen Namen zu tragen. Will man ein Script beenden indem man den Prozess killt erwischt man bei n+1 laufenden wscript-Prozessen nach Murphys Gesetz garantiert zuerst mal den falschen

Wie dem auch sei. Ich habe dafür jetzt eine Lösung die mir erlaubt zukünftig Scripte unter einem beliebigen Prozessnamen auszuführen.

Dazu brauchen wir zuerst natürlich mal das VBScript (s. unten) und speichern es irgendwo unter runasprocess.vbs
01.
set objShell = WScript.CreateObject("WScript.Shell") 
02.
set objSysEnv = objShell.Environment("PROCESS") 
03.
set objFileSys = CreateObject("Scripting.FileSystemObject") 
04.
 
05.
if Wscript.Arguments.Count < 4 then 
06.
	MsgBox("Es wurden zu wenige Parameter angegeben. Der korrekte Aufruf lautet " & vbCRLF & "runasprocess.vbs <processname> <wscript|cscript> <32bit|64bit> <scriptpath> <arg1> <arg2> <arg...n>") 
07.
	wscript.quit 
08.
end if 
09.
 
10.
strTempPath = lcase(objSysEnv("temp")) & "\" 
11.
strHost32 = lcase(objSysEnv("windir")) & "\system32\" 
12.
strHost64 = lcase(objSysEnv("windir")) & "\system32\syswow64\" 
13.
strProcName = lcase(left(Wscript.Arguments(0), 20)) 
14.
strScriptHost = lcase(left(Wscript.Arguments(1),2)) 
15.
strHostVer = lcase(left(Wscript.Arguments(2),2)) 
16.
strRunScript = lcase(Wscript.Arguments(3)) 
17.
strNewProcPath = strTempPath & strProcName & "_" & strScriptHost & strHostVer & ".exe" 
18.
strNewProcArgs = "" 
19.
 
20.
'argumente für zielscript lesen 
21.
for intArg = 4 to Wscript.Arguments.Count - 1 
22.
	strNewProcArgs = strNewProcArgs & wscript.arguments(intArg) & " " 
23.
next 
24.
 
25.
'prüfen ob zielscript existiert 
26.
if not objFileSys.FileExists(strRunScript) then 
27.
	MsgBox("Das angegebene Script existiert nicht. Bitte prüfen Sie Ihre Eingabe.") 
28.
	wscript.quit 
29.
end if 
30.
 
31.
'prüfen ob korrekte angabe für scriptinghost 
32.
if strHostVer <> "64" and strHostVer <> "32" then 
33.
	MsgBox("Für die Scripthost-Version ist nur die Angabe 32Bit oder 64Bit zulässig. Bitte prüfen Sie Ihre Eingabe.") 
34.
	wscript.quit 
35.
end if 
36.
 
37.
'temporäre kopie eines früheren durchlaufs löschen 
38.
if objFileSys.FileExists(strNewProcPath) then 
39.
	objFileSys.DeleteFile strNewProcPath 
40.
end if 
41.
 
42.
'scriptinghost wscript-32bit in neue exe in temp-pfad kopieren 
43.
if strHostVer = "32" and strScriptHost = "ws" then 
44.
	if not objFileSys.FileExists(strHost32 & "wscript.exe") then 
45.
		MsgBox("Es existiert keine 32Bit-Version des Windows-Scriptinghost in " & strHost32) 
46.
		wscript.quit 
47.
	end if 
48.
	strScriptHostSrc = strHost32 & "wscript.exe" 
49.
	objFileSys.CopyFile strHost32 & "wscript.exe", strTempPath, True 
50.
	objFileSys.MoveFile strTempPath & "wscript.exe", strNewProcPath 
51.
end if 
52.
 
53.
'scriptinghost cscript-32bit in neue exe in temp-pfad kopieren 
54.
if strHostVer = "32" and strScriptHost = "cs" then 
55.
	if not objFileSys.FileExists(strHost32 & "wscript.exe") then 
56.
		MsgBox("Es existiert keine 32Bit-Version des Windows-Scriptinghost in " & strHost32) 
57.
		wscript.quit 
58.
	end if 
59.
	objFileSys.CopyFile strHost32 & "cscript.exe", strTempPath, True 
60.
	objFileSys.MoveFile strTempPath & "cscript.exe", strNewProcPath 
61.
end if 
62.
 
63.
'scriptinghost wscript-64bit in neue exe in temp-pfad kopieren 
64.
if strHostVer = "64" and strScriptHost = "ws" then 
65.
	if not objFileSys.FileExists(strHost32 & "wscript.exe") then 
66.
		MsgBox("Es existiert keine 32Bit-Version des Windows-Scriptinghost in " & strHost32) 
67.
		wscript.quit 
68.
	end if 
69.
	objFileSys.CopyFile strHost64 & "wscript.exe", strTempPath, True 
70.
	objFileSys.MoveFile strTempPath & "wscript.exe", strNewProcPath 
71.
end if 
72.
 
73.
'scriptinghost cscript-64bit in neue exe in temp-pfad kopieren 
74.
if strHostVer = "64" and strScriptHost = "cs" then 
75.
	if not objFileSys.FileExists(strHost32 & "wscript.exe") then 
76.
		MsgBox("Es existiert keine 32Bit-Version des Windows-Scriptinghost in " & strHost32) 
77.
		wscript.quit 
78.
	end if 
79.
	objFileSys.CopyFile strHost64 & "cscript.exe", strTempPath, True 
80.
	objFileSys.MoveFile strTempPath & "cscript.exe", strNewProcPath 
81.
end if 
82.
 
83.
'zielscript mit kopie des scriptinghost ausführen 
84.
strCmd = strNewProcPath & " " & strRunScript & " " & strNewProcArgs 
85.
objShell.Run strCmd,1,false 
86.
wscript.quit
Die Syntax für den Aufruf lautet
01.
runasprocess.vbs <processname> <wscript|cscript> <32bit|64bit> <scriptpath> <arg1> <arg2> <arg...n>
Hierbei gilt:
  • <processname> ist der beliebige Name des Prozesses
  • <wscript|cscript> bestimmt den zu verwendenden Scriptinghost
  • <32bit|64bit> gibt an ob die 32Bit- oder 64Bit-Version verwendet werden soll
  • <scriptpath> gibt zum guten Schluss das auszuführenden Script einschl. Pfad und Endung an
  • <arg1...n> enthält evtl. erforderliche Argumente für das auszuführende Script

Und was macht das Script nun eigentlich?
Eigentlich nichts besonderes. Es erstellt lediglich im Temp-Ordner des Benutzers eine Kopie des gewählten Scripting-Host. Diese Kopie bekommt den Namen den man als Prozessname angegeben hat. Mit dieser Kopie wird dann das auszuführende Script ausgeführt.
Danach wird runasprozess.vbs (die ganz original im wscript.exe läuft) beendet.

Ein kleines Beispiel für den Aufruf mit runasprocess.vbs testprozess wscript 32bit c:\temp\test.vbs arg1 arg2 arg2 sieht im Taskmanager dann so aus:

8cb798422aebd5583ccd8c688207e253 - Klicke auf das Bild, um es zu vergrößern

Ich hoffe der eine oder andere kann das Script gebrauchen. Mir wird es auf der Arbeit jedenfalls zukünftig die Arbeit etwas erleichtern.
Mitglied: rubberman
19.07.2012, aktualisiert um 00:56 Uhr
Hallo manuel-r!

Ich finde die Idee interessant, darum gibts 'ne entsprechende Bewertung. Beim Lesen des Titels hatte ich das nämlich beinahe als Scherz aufgefasst

Persönlich werde ich das Script vermutlich nicht nutzen, da das Problem eigentlich einfacher zu lösen ist. Ich lasse im Taskmanager die Befehlszeile mit ausgeben und bekomme so die Zuordnung.
Menü Ansicht > Spalten auswählen ... > Checkbox Befehlszeile

Grüße
rubberman
Bitte warten ..
Mitglied: manuel-r
19.07.2012 um 07:58 Uhr
Ich lasse im Taskmanager die Befehlszeile mit ausgeben und bekomme so die Zuordnung.
Die Option/Spalte gibt es zumindest unter Windows XP aber noch nicht. In Windows 7 ist es drin; bei Vista weiß ich es nicht.
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Arbeiten mit INI Files in VBScript
Anleitung von FriemlerBatch & Shell11 Kommentare

In letzter Zeit habe ich hier im Forum des Öfteren Fragen gesehen, wie man aus einer INI-Datei Werte liest ...

Batch & Shell
Rsync mit einen anderen SSH-Port ausführen
Tipp von FrankBatch & Shell1 Kommentar

Benutzt der SSH-Daemon einen anderen Port als 22 muss man für den rsync Befehl den "e"-Parameter anwenden: Bei $portNumber ...

Erkennung und -Abwehr
Code ohne Macros in Word ausführen!
Information von LochkartenstanzerErkennung und -Abwehr1 Kommentar

Wie in beschrieben, bietet Word per DDE die Möglichkeit, fremden Code auch ohne Makros auszuführen. Das sollte bei Sicherheitsmaßnahmen ...

Batch & Shell
Batch als Dienst bei Systemstart ohne Anmeldung ausführen
Tipp von tralvellerBatch & Shell6 Kommentare

Vorteile: - Anmeldung von Benutzer nicht notwendig - Kann bei Systemstart direkt ausgeführt werden - Keine Aufgabenplanung notwendig - ...

Neue Wissensbeiträge
Verschlüsselung & Zertifikate

19 Jahre alter Angriff auf TLS funktioniert immer noch

Information von BassFishFox vor 2 StundenVerschlüsselung & Zertifikate

Interessant zu lesen. Der Bleichenbacher-Angriff gilt unter Kryptographen als Klassiker, trotzdem funktioniert er oft noch. Wie wir herausgefunden haben, ...

Windows 10

Windows 10 Fall Creators Update - Neue Funktion Hyper-V Standardswitch kann ggf. Fehler bei Proxy Configs verursachen

Erfahrungsbericht von rzlbrnft vor 13 StundenWindows 102 Kommentare

Hallo Kollegen, Da wir die Gefahr lieben, haben wir bei einigen Usern nun mittlerweile das Creators Update drauf. Einige ...

Sicherheit

TLS-Zertifikat und privater Schlüssel von Microsofts Dynamics 365 geleakt

Information von Penny.Cilin vor 14 StundenSicherheit

Microsoft hat versehentlich das TLS-Zertifikat inklusive dem privaten Schlüssel seiner Business-Anwendung Dynamics 365 geleakt. TLS-Zertifikat und privater Schlüssel von ...

Viren und Trojaner

Deaktivierter Keylogger in HP Notebooks entdeckt

Information von bitcoin vor 1 TagViren und Trojaner3 Kommentare

Ein Grund mehr warum man Vorinstallationen der Hersteller immer blank bügeln sollte Der deaktivierte Keylogger findet sich im vorinstallierten ...

Heiß diskutierte Inhalte
Netzwerkmanagement
Firefox Profieles im Roaming
gelöst Frage von Hendrik2586Netzwerkmanagement17 Kommentare

Hallo liebe Leute. :) Ich hab da ein kleines Problem, welches anscheinend nicht unbekannt ist. Wir nutzen hier in ...

Netzwerkmanagement
NAS über zwei weitere Ethernet Anschlüsse verbinden
gelöst Frage von Sibelius001Netzwerkmanagement16 Kommentare

Sorry - ich bin hier wahrscheinlich als kompetter IT Trottel unterwegs. Aber eventuell kann mir jemand ganz einfach helfen: ...

LAN, WAN, Wireless
Häufig Probleme beim Anmelden in WLAN
Frage von mabue88LAN, WAN, Wireless15 Kommentare

Hallo zusammen, in einem Netzwerk gibt es relativ häufig (1-2 mal pro Woche) Probleme mit der WLAN-Verbindung. Zunächst mal ...

Netzwerkgrundlagen
Hi eine blöde frage. xD
Frage von 132954Netzwerkgrundlagen13 Kommentare

Also: Habe 2012 r2 essentials neuinstalliert, allerdings installiert diese version ja gleich diesen gangen AD kram mit, den hab ...