I’m trying to run/kill a defrag program/process after it runs but I’m not sure how to go about it with VBscript. Here’s what I’ve got:
‘Program to run Defraggler (Hard drive defragger)
strComputer = “.”
Dim WshShell
Set WshShell = CreateObject(“wscript.Shell”)
‘Open Defraggler
WshShell.Run(“””C:\Program Files\Defraggler\Defraggler.exe”””)
‘Sleep for 2 seconds
WScript.Sleep 2000
‘Wait until Defraggler has loaded
While WshShell.AppActivate(“Piriform Defraggler”) = False
WScript.Sleep 100
Wend
‘Bring Defraggler to the foreground
WshShell.AppActivate(“Piriform Defraggler”)
‘Send Alt-A keystroke
WshShell.SendKeys “%A”
WScript.Sleep 1000
WshShell.SendKeys “{DOWN}”
WScript.Sleep 1000
‘Send ENTER keystroke
WshShell.SendKeys “{ENTER}”
WScript.Sleep 1000
‘Send ENTER keystroke
WshShell.SendKeys “{ENTER}”
WScript.Sleep 1000
‘Ensures Virtual Memory is given time to increase
Wscript.Sleep 100000
‘Select an instance of Win32_process = Defraggler
Set wmi = getobject(“winmgmts:”)
sQuery = “select * from win32_process ” & “where name=’Defraggler.exe'”
set processes = wmi.execquery(sQuery)
‘Allow Defraggler to run while Virtual memory size is greater than 14000
Do while WorkingSetSize > 14000
wscript.sleep 500
set processes = wmi.execquery(sQuery)
Loop
‘Exit the program now that the Defraggler is finished updating
Set objWMIService = GetObject(“winmgmts:” _
& “{impersonationLevel=impersonate}!\\” & strComputer & _
“\root\cimv2”)
Set colProcessList = objWMIService.ExecQuery _
(“Select * from Win32_Process Where Name = ‘Defraggler.exe'”)
For Each objProcess in colProcessList
objProcess.Terminate()
Next
It starts the defrag program, but it doesn’t kill the program after it runs. All advice is wonderful.