2015-11-18 2 views
0

У меня есть этот VBScript, который поможет мне удалить локальных пользователей из местных администраторов. Я не могу заставить его игнорировать рабочие станции, которых нет в сети.игнорировать рабочие станции, которые находятся в автономном режиме и возобновить

Есть ли способ игнорировать рабочие станции, которые не найдены, и продолжить ли ее до следующей строки под файлом computers.txt?

Например, скажем, что PC1 и PC3 найдены, но PC2 не найден. Я хочу, чтобы он игнорировал не найденные рабочие станции и продолжался до конца списка компьютеров.

Я пробовал On Error Resume Next (did not work), и я пробовал Const ForReading = 1, Const ForAppending = 8, Const OverwriteExisting = True (тоже не работал).

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!" 
+4

Привет, пожалуйста, удалите комментарий и добавьте код на свой вопрос в теге кода – sodawillow

ответ

1

Вопреки распространенному мнению On Error Resume Next не волшебно делать ошибки уходят. Также не определены символические константы для параметров метода OpenTextFile.

Если вы хотите пропустить компьютеры, которые недоступны, вам необходимо проверить доступность каждого компьютера. Общим способом сделать это является класс Win32_PingStatus WMI.

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 

Кроме того, вы, вероятно, нужно обработать содержание computers.txt в цикле. Ваш текущий код читает только первую строку. Чтобы обработать более одной строки из файла, используйте что-то вроде этого:

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

    '... 
Loop 
objFile.Close 
Смежные вопросы