Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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 2) - Jetzt verbinden

18.07.2012 um 22:25 Uhr, 5999 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 ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(4)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
JavaScript
AngularJS Variable über Input in Funktion ausführen

Frage von badkilla zum Thema JavaScript ...

Windows Server
gelöst Skript per GPO ausführen - Berechtigungen? (13)

Frage von honeybee zum Thema Windows Server ...

Entwicklung
gelöst Get ip from external txt file and use in vbscript (5)

Frage von thankusomuch zum Thema Entwicklung ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...

Outlook & Mail
Outlook 2010 findet ost datei nicht (18)

Frage von Floh21 zum Thema Outlook & Mail ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (17)

Frage von Unwichtig zum Thema Netzwerkmanagement ...