Solved

VBS/Wscript check if computer exists (remotely/silently uninstall symantec thru script)

Posted on 2007-04-05
10
2,374 Views
Last Modified: 2012-08-14
Ok.. this is a run-off from a previous question I had.
http://www.experts-exchange.com/OS/Microsoft_Operating_Systems/Windows/XP/Q_22494186.html
I'm creating a script to remotely and silently remove symantec from all computers. It pulls all computer names from "computer.txt" and stores it in an array. Then for each computer, runs code to change registry keys and delete symantec.
I've been testing it out, but the problem is during testing. As a test, I put MY computer name 3 times in the computer.txt file. When I run it, the first time it hits my computer, it looks ok. But anytime after it, it fails, saying computer doesn't exist. This also occurs even if I put 3 different computer names. What's wrong with my error handling? Am I even doing it correctly? So far all the "executable" code is commented out and replaced with alerts. This is how I'm testing it (so I don't mess up the system =P )
Anyone help, please?

'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.FileSystemObject")
Set WriteStuff = myFSO.OpenTextFile("symantec.log", 2, True)

Dim objShell: Set objShell=CreateObject("Wscript.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("Starting 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 = "computer.txt"

'Read computer names for install from text file.
Set objFSO = CreateObject("Scripting.FileSystemObject")

If objFSO.FileExists(g_strHostFile) Then
  Set objTextStream = objFSO.OpenTextFile(g_strHostFile, 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.AtEndOfStream
  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="{BA4B71D1-898E-4306-AE87-8BA7A596F0ED},{5a633ed0-e5d7-4d65-ab8d-53ed43510284},{a011a1dc-7f1d-4ea8-bd11-0c5f9718e428},{473af7d0-b864-4699-9974-df570c5b6dce},{a011a1dc-7f1d-4ea8-bd11-0c5f9718e428},{50e125d1-88e5-48ce-80ae-98ec9698e639},{33CFCF98-F8D6-4549-B469-6F4295676D83}"
'---------------------------------------------------------


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-------
 Const HKEY_LOCAL_MACHINE = &H80000002
 Set objReg = GetObject("winmgmts:\\" & strComputer & "\root\default:StdRegProv")



 ' ----If getObject fails, server is offline or doesn't exist -------------
 If err.number <> 0 then
      err.clear

        objShell.Popup "ERROR: "& strComputer & " is offline or doesn't exist", 2
      'wscript.echo "ERROR: "& strComputer & " is offline or doesn't exist"
      
      'write to log file
      WriteStuff.WriteLine(timeStamp & "  " & 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\VirusProtect6\CurrentVersion\AdministratorOnly\Security"
   ValueName = "LockUnloadServices"

   objReg.GetDWORDValue HKEY_LOCAL_MACHINE, strKeyPath, ValueName, strValue

   If strValue=1 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=1 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

        'WScript.Echo "psexec \\" & strComputer & " MsiExec.exe /norestart /q/x" & strSymantecKey & " REMOVE=ALL"

  Next

  'Print to log file
   WriteStuff.WriteLine(timeStamp & " - " & strComputer & " - Symantec Removed.")

  objShell.Popup strComputer & " - Symantec Removed", 2
  'WScript.Echo strComputer & " - Symantec Removed"


 End If


SET objReg=Nothing
 
 
Next


'Write to log file and close it
WriteStuff.WriteLine(vbcrlf & "Script is Done, yo! Click OK to close.")
WriteStuff.Close
SET WriteStuff = NOTHING
SET myFSO = NOTHING

'Let user know the script is done!
WScript.Echo "SCRIPT IS DONE, YO!!!"
0
Comment
Question by:ThinkPaper
  • 4
  • 4
  • 2
10 Comments
 
LVL 16

Author Comment

by:ThinkPaper
ID: 18859605
btw computer.txt would look something like:

comp1
comp2
comp3
0
 
LVL 67

Expert Comment

by:sirbounty
ID: 18859810
Try this version...

'--------------- 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.FileSystemObject")
Set WriteStuff = myFSO.OpenTextFile("symantec.log", 2, True)  'should specify the full path for the log...

Dim objShell: Set objShell=CreateObject("Wscript.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("Starting Script, yo!" & vbcrlf)
'-------------------- Grab computer names from Computer.txt and store in array ----------------

'Initialize global constants and variables.
Const FOR_READING = 1
g_strHostFile = "computer.txt"

'Read computer names for install from text file.
''''removed - you already have an fso reference   Set objFSO = CreateObject("Scripting.FileSystemObject")


'------- Insert all Available Keys Here-------------------
Dim strSymantecKeys
strSymantecKeys="{BA4B71D1-898E-4306-AE87-8BA7A596F0ED},{5a633ed0-e5d7-4d65-ab8d-53ed43510284},{a011a1dc-7f1d-4ea8-bd11-0c5f9718e428},{473af7d0-b864-4699-9974-df570c5b6dce},{a011a1dc-7f1d-4ea8-bd11-0c5f9718e428},{50e125d1-88e5-48ce-80ae-98ec9698e639},{33CFCF98-F8D6-4549-B469-6F4295676D83}"
'---------------------------------------------------------


arrSymantecKeys = Split(strSymantecKeys, ",")

If myFSO.FileExists(g_strHostFile) Then
  arrPCs=Split(myFSO.OpenTextFile(g_strHostFile).ReadAll, vbNewLine)
Else
  WScript.Echo "ERROR: Input file " & g_strHostFile & " not found."
  WScript.Quit
End If

'Loop through list of computers and perform tasks on each.
For Each PC in arrPCs
'''  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

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-------
 Const HKEY_LOCAL_MACHINE = &H80000002
 Set objReg = GetObject("winmgmts:\\" & PC & "\root\default:StdRegProv")

 ' ----If getObject fails, server is offline or doesn't exist -------------
 If err.number <> 0 then
      objShell.Popup "ERROR: "& strComputer & " is offline or doesn't exist", 2
      'wscript.echo "ERROR: "& strComputer & " is offline or doesn't exist"

      'write to log file
      WriteStuff.WriteLine(timeStamp & "  " & 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\VirusProtect6\CurrentVersion\AdministratorOnly\Security"
   ValueName = "LockUnloadServices"

   objReg.GetDWORDValue HKEY_LOCAL_MACHINE, strKeyPath, ValueName, strValue

   If strValue=1 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=1 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

        'WScript.Echo "psexec \\" & strComputer & " MsiExec.exe /norestart /q/x" & strSymantecKey & " REMOVE=ALL"

  Next

  'Print to log file
   WriteStuff.WriteLine(timeStamp & " - " & strComputer & " - Symantec Removed.")

  objShell.Popup strComputer & " - Symantec Removed", 2
  'WScript.Echo strComputer & " - Symantec Removed"


 End If


SET objReg=Nothing
 
 
Next


'Write to log file and close it
WriteStuff.WriteLine(vbcrlf & "Script is Done, yo! Click OK to close.")
WriteStuff.Close
SET WriteStuff = NOTHING
SET myFSO = NOTHING

'Let user know the script is done!
WScript.Echo "SCRIPT IS DONE, YO!!!"
0
 
LVL 16

Author Comment

by:ThinkPaper
ID: 18860422
OH! Ok.. I figured out the problem. I started by printing out err.number and then finally it came up with some useful debug code. It pointed to
Const HKEY_LOCAL_MACHINE = &H80000002
which was sitting inside a for loop. I moved it out and looks like it work..
Now I got another problem!
I'm actually trying to run it now.. so this:
WScript.Echo "psexec \\" & strComputer & " MsiExec.exe /norestart /q/x" & strSymantecKey & " REMOVE=ALL"

should now be:
psexec \\" & strComputer & " MsiExec.exe /norestart /q/x" & strSymantecKey & " REMOVE=ALL"

But this doesn't work. How do I incorporate variables in a command like this...??


0
 
LVL 8

Expert Comment

by:jwarnken
ID: 18860489
Try this
psexec \\" & strComputer & " MsiExec.exe /norestart /q/x" & Replace(Replace(strSymantecKey ,"{",""),"}","") & " REMOVE=ALL"
0
 
LVL 8

Expert Comment

by:jwarnken
ID: 18860497
oops, try this
psexec \\" & strComputer & " MsiExec.exe /norestart /q /x " & Replace(Replace(strSymantecKey ,"{",""),"}","") & " REMOVE=ALL"
0
Complete VMware vSphere® ESX(i) & Hyper-V Backup

Capture your entire system, including the host, with patented disk imaging integrated with VMware VADP / Microsoft VSS and RCT. RTOs is as low as 15 seconds with Acronis Active Restore™. You can enjoy unlimited P2V/V2V migrations from any source (even from a different hypervisor)

 
LVL 67

Expert Comment

by:sirbounty
ID: 18860506
I would say use: (did you change back to strComputer?  Should be PC...?)

psexec \\" & strComputer & " MsiExec.exe /norestart /q /x " & chr(34) & strSymantecKey & chr(34) & " REMOVE=ALL"
0
 
LVL 16

Author Comment

by:ThinkPaper
ID: 18860520
Hmm.. I think the reason it's not working is that I'm incorporating vbscript with command line code..
 I'm going to have to look more into this.. =/
0
 
LVL 67

Accepted Solution

by:
sirbounty earned 500 total points
ID: 18860537
Yep yep - but you should still be able to do this...you just need to use chr(34) for where you would have used the quotes...
Change this for/next section...

 For Each strSymantecKey in arrSymantecKeys
  'WScript.Echo "psexec \\" & strComputer & " MsiExec.exe /norestart /q/x" & strSymantecKey & " REMOVE=ALL"
  objShell.Run "psexec \\" & strComputer & " MsiExec.exe /norestart /q /x " & chr(34) & strSymantecKey & chr(34) & " REMOVE=ALL"
 Next
0
 
LVL 16

Author Comment

by:ThinkPaper
ID: 18882440
ah ok got it thanks. =) I'm going to post another question related to this script in a sec...
0
 
LVL 67

Expert Comment

by:sirbounty
ID: 18882449
Cool - I'll keep an eye out.
Thanx for the grade! :^)
0

Featured Post

Enterprise Mobility and BYOD For Dummies

Like “For Dummies” books, you can read this in whatever order you choose and learn about mobility and BYOD; and how to put a competitive mobile infrastructure in place. Developed for SMBs and large enterprises alike, you will find helpful use cases, planning, and implementation.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
Windows 7 Update hangs indefinitely after reinstall 32 112
Identify files for which names are too long 7 39
How to open a .vcf file 11 51
Problem to search 5 23
This is an article about Leadership and accepting and adapting to new challenges. It focuses mostly on upgrading to Windows 10.
Join Greg Farro and Ethan Banks from Packet Pushers (http://packetpushers.net/podcast/podcasts/pq-show-93-smart-network-monitoring-paessler-sponsored/) and Greg Ross from Paessler (https://www.paessler.com/prtg) for a discussion about smart network …
Windows 8 comes with a dramatically different user interface known as Metro. Notably missing from the new interface is a Start button and Start Menu. Many users do not like it, much preferring the interface of earlier versions — Windows 7, Windows X…
With the advent of Windows 10, Microsoft is pushing a Get Windows 10 icon into the notification area (system tray) of qualifying computers. There are many reasons for wanting to remove this icon. This two-part Experts Exchange video Micro Tutorial s…

911 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

20 Experts available now in Live!

Get 1:1 Help Now