I had an issue with one of my clients this week and slow workstation start up times. Looking through the items that were running for all users at login was Roxio Drag2Disk as someone had not taken it out of the standard software image. The client didn’t use or need the software so I looked at a way to uninstall the various components without having to visit each machine individually (Yes we will be removing it from the image).
I thought it would be useful to get the script out there in case others need to accomplish the same task. If you want to use it just dump it somewhere central on your network (eg NETLOGON) and then run it as a startup script in a Group Policy Object
Script is below
' Script: uninstall_roxio.vbs ' Author: Matt White ' Version: 1.0 ' Date: 15-06-2011 ' Details: Uninstall all Roxio components from a workstation ' Usage: Run as a startup script GPO linked to the relevant Computers OU 'On Error Resume Next ' Define any Variables dim arrRoxioGUIDS, arrRoxioNames Set objShell = Wscript.CreateObject("Wscript.Shell") Set objFSO = Wscript.CreateObject("Scripting.FileSystemObject") Const ForReading = 1, ForWriting = 2, ForAppending = 8 ' Define Application GUIDS arrRoxioGUIDs = Array("{30465B6C-B53F-49A1-9EBA-A3F187AD502E}", _ "{0D397393-9B50-4c52-84D5-77E344289F87}", _ "{2F4C24E6-CBD4-4AAC-B56F-C9FD44DE5668}", _ "{619CDD8A-14B6-43a1-AB6C-0F4EE48CE048}", _ "{6675CA7F-E51B-4F6A-99D4-F8F0124C6EAA}", _ "{83FFCFC7-88C6-41c6-8752-958A45325C82}", _ "{C8B0680B-CDAE-4809-9F91-387B6DE00F7C}", _ "{0394CDC8-FABD-4ed8-B104-03393876DFDF}") arrRoxioNames = Array("RoxioUpdateManager", _ "RoxioCreatorData", _ "RoxioDragToDisk", _ "RoxioCreatorCopy", _ "RoxioExpressLabeler", _ "RoxioCreatorAudio", _ "RoxioCreatorDE", _ "RoxioCreatorTools") ' Create Check if log file exists, if not create it if objFSO.FileExists("C:roxiouninstall.log") Then Wscript.Echo "File Exists" Set objLogFile = objFSO.OpenTextFile("C:roxiouninstall.log", ForAppending) Else Wscript.Echo "Creating file" Set objNewLogFile = objFSO.CreateTextFile("C:roxiouninstall.log") objNewLogFile.Close Set objLogFile = objFSO.OpenTextFile("C:roxiouninstall.log", ForAppending) End If objLogFile.WriteLine "Uninstall of all Roxio components started " & Now Wscript.Quit ' Uninstall Each component For i = 0 to UBound(arrRoxioNames) ' Check if component is installed If RegKeyExists("HKLM", "SOFTWAREMicrosoftWindowsCurrentVersionUninstall" & arrRoxioGUIDs(i),"UninstallString") = "True" Then objLogFile.WriteLine "Uninstalling " & arrRoxioNames(i) objShell.Run "cmd /c msiexec.exe /x " & arrRoxioGUIDs(i) & " /quiet",0,True If RegKeyExists("HKLM", "SOFTWAREMicrosoftWindowsCurrentVersionUninstall" & arrRoxioGUIDs(i),"UninstallString") = "True" Then objLogFile.WriteLine "Error uninstalling: " & arrRoxioNames(i) Else objLogFile.WriteLine "Success uninstalling: " & arrRoxioNames(i) End If Else objLogFile.WriteLine("Error Uninstalling: " & arrRoxioNames(i) & " could not detect installed version.") End If Next ' Close Log File objLogFile.Close ' Function to check if registry key exists Function RegKeyExists(nHive, strPath, strValueName) Select Case Left(nHive, 20) Case "HKCR", "HKEY_CLASSES_ROOT" nHive = &H80000000 Case "HKCU", "HKEY_CURRENT_USER" nHive = &H80000001 Case "HKLM", "HKEY_LOCAL_MACHINE" nHive = &H80000002 Case "HKU", "HKEY_USERS" nHive = &H80000003 Case "HKCC", "HKEY_CURRENT_CONFIG" nHive = &H80000005 Case Else WScript.Echo "Hive Not Supported." WScript.Quit End Select Dim objRegistry Dim strComputer, strValue strComputer = "." Set objRegistry = GetObject("winmgmts:\" & strComputer & "rootdefault:StdRegProv") objRegistry.GetStringValue nHive, strPath, strValueName, strValue RegKeyExists = Not IsNull(strValue) RegKeyExists = CStr (RegKeyExists) End Function