Stephen V.
Stephen V.

Reputation: 1

ignore workstations that are offline and resume

I have this VBScript to help me remove local users from the local admins. I can't seem to get it to ignore workstations that are not on the network.

Is there a way to ignore workstations that are not found and have it continue to the next line under the computers.txt file?

For example, say PC1 and PC3 are found but PC2 is not found I want it to ignore not found workstations and continue until the end of the list of computers.

I've tried On Error Resume Next (didnt work), and I tried Const ForReading = 1, Const ForAppending = 8, Const OverwriteExisting = True (didnt work either).

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile("C:\adminScript\computers.txt")

strComputer = objFile.ReadLine

Set objGroup = GetObject("WinNT://" & strComputer & "/Administrators")
For Each objUser In objGroup.Members
  If objUser.Name <> "Administrator" AND objUser.Name <> "Domain Admins" AND objUser.Name <> "G_SCCMAgent" AND objUser.Name <> "User" Then
    Wscript.Echo objUser.Name    
    objGroup.Remove(objUser.ADsPath)
  End If
Next    

wscript.Echo "I am done!"

Upvotes: 0

Views: 28

Answers (1)

Ansgar Wiechers
Ansgar Wiechers

Reputation: 200453

Contrary to popular belief On Error Resume Next doesn't magically make errors go away. Neither does defining symbolic constants for parameters of the OpenTextFile method.

If you want to skip over computers that aren't available you need to actually test the availability of each computer. A common way to do this is the Win32_PingStatus WMI class.

Set wmi = GetObject("winmgmts://./root/cimv2")

isAvailable = False
qry = "SELECT * FROM Win32_PingStatus WHERE Address='" & strComputer & "'"
For Each res In wmi.ExecQuery(qry)
  If res.StatusCode = 0 Then isAvailable = True
Next

If isAvailable Then
  'modify administrators group
End If

Also, you probably need to process the content of computers.txt in a loop. Your current code reads only the first line. To process more than one line from the file use something like this:

Set objFile = objFSO.OpenTextFile("C:\adminScript\computers.txt")
Do Until objFile.AtEndOfStream
  strComputer = objFile.ReadLine

  '...
Loop
objFile.Close

Upvotes: 1

Related Questions