This is yet another question related to previous questions I posted. I have a script that removes symantec from a specified list of computers. Symantec is removed using the PSEXEC tool from Microsoft.
The way the script works is like this:
I have a list of computers in computer.txt. This is stored in an array.
I also have a list of Uninstall keys for Symantec stored in an array. The reason I have multiple uninstall keys is because some client computers have different versions of symantec installed on their computer. To uninstall them, I need to set the UninstallPW key to false. I also need the specific uninstall key to remove it. So for each computer, run the PSEXEC command for each key:
psexec \\" & strComputer & " MsiExec.exe /norestart /q /x " & strSymantecKey & " REMOVE=ALL
This somewhat works. The first problem is it doesn't seem to perform like a "runwait".. where it waits until the uninstall is done before executing the next command. It basically just runs right after the other without waiting for it to be done. I'm afraid this could cause problems during the uninstall.
The second problem is that when this runs, the command prompt opens for a split second and closes. I would like to have one continuous command window open at all times until the script is completely done. Is there a way to do this?
The third problem is this. When the psexec command finishes, it returns an error code in the command line. I would like to keep track of this in a log. But I don't know how to RETRIEVE the error code from the command line back to VBscript. Can anyone help me figure out how to retrieve the error code, and if the error code is 0 (successful) then exit out the for loop and go to next computer?
My main concern right now is retreiving the error and logging. Thanks!
Here is my code:
'Remove Symantec Remotely and Silently
'Results are stored in a log file: symantec.log
'--------------- Create Log File ----------------
'Open up the path to save the information into a text file
Dim Stuff, myFSO, WriteStuff, timeStamp
timeStamp = Time()
Set myFSO = CreateObject("Scripting.Fi
leSystemOb
ject")
Set WriteStuff = myFSO.OpenTextFile("symant
ec.log", 2, True)
Dim objShell: Set objShell=CreateObject("Wsc
ript.Shell
")
Dim startMsg
startMsg = "STARTING SCRIPT, YO!" & vBCrLF & "You do not neet to click OK until it is done." &_
vbcrlf & "When the script is done, it will say DONE, YO! Check symantec.log for results."
objShell.Popup startMsg, 3
'WScript.Echo startMsg
WriteStuff.WriteLine("Star
ting Script, yo!" & vbcrlf)
'-------------------- Grab computer names from Computer.txt and store in array ----------------
strComputers = ""
On Error Resume Next
'Initialize global constants and variables.
Const FOR_READING = 1
g_strHostFile = "computer3520.txt"
'Read computer names for install from text file.
Set objFSO = CreateObject("Scripting.Fi
leSystemOb
ject")
If objFSO.FileExists(g_strHos
tFile) Then
Set objTextStream = objFSO.OpenTextFile(g_strH
ostFile, FOR_READING)
Else
WScript.Echo "ERROR: Input file " & g_strHostFile & " not found."
WScript.Quit
End If
'Loop through list of computers and perform tasks on each.
Do Until objTextStream.AtEndOfStrea
m
readingInComputer= objTextStream.ReadLine
' Wscript.Echo VbCrLf & readingInComputer
strComputers = strComputers + readingInComputer +","
Loop
objTextStream.Close
arrComputers = Split(strComputers , ",")
'-------------------------
---- Symnantec Piece---------------------
----------
--
'Pre condition: arrComputers must be populated from Computer.txt
'------- Insert all Available Keys Here-------------------
Dim strSymantecKeys
strSymantecKeys="{5a633ed0
-e5d7-4d65
-ab8d-53ed
43510284},
{46B63F23-
2B4A-4525-
A827-68802
6BE5E40},{
BA4B71D1-8
98E-4306-A
E87-8BA7A5
96F0ED}.{a
011a1dc-7f
1d-4ea8-bd
11-0c5f971
8e428},{47
3af7d0-b86
4-4699-997
4-df570c5b
6dce},{a01
1a1dc-7f1d
-4ea8-bd11
-0c5f9718e
428},{50e1
25d1-88e5-
48ce-80ae-
98ec9698e6
39},{D75D4
8AF-E2D5-4
9EF-9571-E
E7AFB6565B
4}"
'-------------------------
----------
----------
----------
--
Const HKEY_LOCAL_MACHINE = &H80000002
arrSymantecKeys = Split(strSymantecKeys, ",")
For Each strComputer in arrComputers
On Error Resume Next
'---- If computername is blank then exit loop ---
If strComputer = "" Then
exit for
End If
'----------- Set Uninstall Password & LockUnloadSvcs Registry Key Values-------
Set objReg = GetObject("winmgmts:\\" & strComputer & "\root\default:StdRegProv"
)
'objShell.Popup "Error = " & err.number & "!!!", 1
' ----If getObject fails, server is offline or doesn't exist -------------
If err.number <> 0 then
err.clear
objShell.Popup "ERROR: "& strComputer & " is offline or access is denied", 1
'wscript.echo "ERROR: "& strComputer & " is offline or access is denied"
'write to log file
WriteStuff.WriteLine(timeS
tamp & " " & strComputer & " - ERROR! It is offline or doesn't exist.")
On Error GoTo 0
'------ Else GO ahead and remove Registry Keys ---------------------
Else
On Error GoTo 0
' strKeyPath = "SOFTWARE\INTEL\LANDesk\Vi
rusProtect
6\CurrentV
ersion\Adm
inistrator
Only\Secur
ity"
' ValueName = "LockUnloadServices"
' objReg.GetDWORDValue HKEY_LOCAL_MACHINE, strKeyPath, ValueName, strValue
' If strValue<>0 Then
' objReg.setDWORDValue HKEY_LOCAL_MACHINE, strKeyPath, ValueName, 0
'WScript.Echo strComputer & ": LockUnloadServices set to: " & strValue
' End If
' ValueName = "UseVPUninstallPassword"
' objReg.GetDWORDValue HKEY_LOCAL_MACHINE, strKeyPath, ValueName, strValue
' If strValue<>0 Then
' objReg.setDWORDValue HKEY_LOCAL_MACHINE, strKeyPath, ValueName, 0
'WScript.Echo strComputer & ": UninstallPW set to: " & strValue
' End If
'----- Run MSIEXEC to remove Symantec -------------
For Each strSymantecKey in arrSymantecKeys
'objShell.run "%comspec% /k psexec \\" & strComputer & " MsiExec.exe /norestart /q /x " & strSymantecKey & " REMOVE=ALL", 8, true
objShell.run "psexec \\" & strComputer & " MsiExec.exe /norestart /q /x " & strSymantecKey & " REMOVE=ALL", 8, true
'objShell.Run "%comspec% /k rem "
Next
'Print to log file
WriteStuff.WriteLine(timeS
tamp & " - " & strComputer & " - Symantec Removed.")
'objShell.Popup strComputer & " - Symantec Removed", 1
'WScript.Echo strComputer & " - Symantec Removed"
End If
SET objReg=Nothing
Next
'Write to log file and close it
WriteStuff.WriteLine(vbcrl
f & "Script is Done, yo!
WriteStuff.Close
SET WriteStuff = NOTHING
SET myFSO = NOTHING
SET objShell = NOTHING
'Let user know the script is done!
WScript.Echo "SCRIPT IS DONE, YO!!!"
Start Free Trial