Check_Kill_Prozess
Zuerst Deinstallation von MSIs (in diesem Fall der Office Communicator)
Dann dreht sich das Script im Loop und wartet auf einen Prozess namens "setup.exe" 
Bei jedem Umlauf dann werden die laufenden Prozesse abgefragt und bei Übereinstimmung mit den Namen aus dem Array dann hart beendet. 
So erzieht man User!
Das Script war die Anforderung eines Kunden, der ein neues MS-Office an seine User verteilen wollte.
Ziemlich unbelehrbare User starteten den Communicator oder ein anderes Office-Programm immer wieder
und beeinflussten die korrekte Laufzeit des Office Setups. Mit dieser Lösung war dann Abhilfe geschaffen worden.
option explicit  Dim wshell, fso, process_arr, strComputer, objWMIService, colItems, objItem Dim PID, ra, ra1, i Dim SetupQuery, SQItems, SQProcess strComputer = "." set wshell=createobject ("wscript.shell") set fso=createobject ("scripting.filesystemobject")
process_arr = Array ("communicator.exe", "outlook.exe", "winword.exe", "msaccess.exe", "excel.exe", "powerpnt.exe")
i=0
'Uninstalling Communicator wshell.run "C:\Windows\system32\msiexec.exe" & " /x {E43338D6-366F-4E63-B793-E4C1EEB19FFB} /qn", 0, True wshell.run "C:\Windows\system32\msiexec.exe" & " /x {CEECF731-3F08-4210-8073-7E87F58C01D3} /qn", 0, True
avoidprocess
sub avoidprocess  Do Until ra1="setup.exe"  wscript.sleep 500  KillThemAll
Set SetupQuery = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")  Set SQItems = objWMIService.ExecQuery("Select * from Win32_process")  For Each SQProcess in SQItems ra1=SQProcess.caption  next  loop  end sub
sub KillThemAll  on error resume next  for i = lbound (process_arr) to ubound (process_arr)  Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")  Set colItems = objWMIService.ExecQuery("Select * from Win32_process where name =" & "'" & process_arr(i) & "'")  For Each objItem in colItems ra = objItem.Caption
if Instr (0,ra,process_arr(i),1) then wshell.run "taskkill /im " & process_arr(i) & " /F", 0, True end if
next next
end sub