Пример ChangeAdmPass.vbs файла:
(Скачать файл можно будет
здесь. ЗЫ Не тыкать! Жать правой кнопкой: сохранить ссылку как...)
Основные параметры:
-
OneComps - конкретный комп из objOU. Если не указан, то все компы из objOU. Писать заглавными буквами в ковычках через запятую!!!;
-
NoComps - исключения, конкретный комп из objOU. Если не указан, то без исключений. Писать заглавными буквами в ковычках через запятую!!!;
-
ComputerOUs - доступные объекты;
-
DC - DC домена;
-
UserNameRu, UserNameEn - логин администратора (RU/EN);
-
defaultpw - новый пароль (по умолчанию);
-
MinPwLen - минимальная длина пароля.
ЗЫ: В тексте предусмотрена возможность вывода сообщений через WScript.Echo вместо окна IE (требуется снять/установить соответствующие комментарии)!
Текст ChangeAdmPass.vbs:
' !!!!!!!!!!!!!!!!!!
' Это можно изменить
' !!!!!!!!!!!!!!!!!!
'Выбор OneComp - конкретный комп из objOU. Если не указан, то все компы из objOU. Писать заглавными буквами в ковычках через запятую!!!
Dim OneComps
OneComps = Array("")
'Исключения - конкретный комп из objOU. Если не указан, то без исключений. Писать заглавными буквами в ковычках через запятую!!!
Dim NoComp
NoComps = Array("SHKAF", "TUMBA")
'Доступные объекты objOU
Dim ComputerOUs
ComputerOUs = Array("OU=Office1", "OU=Garazh, OU=OfficeS", "OU=Poligon, OU=OfficeS", "OU=Office2", "OU=OfficeServers")
DC = "DC=example, DC=com"
'Пользователь
UserNameRu = "Администратор"
UserNameEn = "Administrator"
'Пароль по умолчанию
defaultpw = "Pa55W0Rd"
'Длина пароля не менее
MinPwLen = 8
'Параметры окна ie
ieWidth = 800
ieHeight = 700
'Заголовок
innerhtml = "<h1>Установка нового пароля</h1>"
' !!!!!!!!!!!!!!!
' Далее не менять
' !!!!!!!!!!!!!!!
i = 0
ComputerOUString = "ComputerOU в " & DC & ":"
For Each ComputerOU in ComputerOUs
i = i +1
ComputerOUString = ComputerOUString & VBNewLine & i & ": " & ComputerOU
Next
Set objArgs = WScript.Arguments
On Error Resume Next
'Выбор объектов
ComputerOUi = objArgs(0)
If Err.Number <> 0 Then
ComputerOUi = InputBox(ComputerOUString, "Быбор ComputerOU", 1)
Err.Clear
End If
If RegExpTest("^[1-" & i & "]$", ComputerOUi) Then
OU = ComputerOUs(ComputerOUi-1) & ", " & DC
Else
MsgBox "Ошибка: значение ComputerOU вне диапазона!", WScript.Quit()
End If
Set objOU = GetObject("LDAP://" & OU)
objOU.Filter = Array("Computer")
innerhtml = innerhtml & "<h2>Условия:</h2>Объект: " & OU & "<br/>"
'Выбор Test: 0 - не тест, 1 - тест
IfTest = objArgs(1)
If Err.Number <> 0 Then
IfTest = InputBox("IfTest:" & VBNewLine & "Нормальный запуск = 0" & VBNewLine & "Тестовый запуск = 1", "IfTest", 1)
Err.Clear
End If
Select Case IfTest
Case "0" Test = 0
Case "1"
Test = 1
innerhtml = innerhtml & "<h3>Тестовый режим, измеения не вносятся!</h3>"
Case Else MsgBox "Не верный ввод!", WScript.Quit()
End Select
'Новый пароль:
NewPasswd = objArgs(2)
If Err.Number <> 0 Then
NewPasswd = InputBox("Passwd:" & VBNewLine & "новый пароль не менее " & MinPwLen & " знаков", "Passwd", defaultpw)
Err.Clear
End If
LenNewPasswd = Len(NewPasswd)
If LenNewPasswd < MinPwLen Then
MsgBox "Слишком короткий пароль:" & VBNewLine & "Должно быть не менее" & MinPwLen & "знаков!", WScript.Quit()
End If
Set objExplorer = WScript.CreateObject("InternetExplorer.Application")
objExplorer.Navigate "about:blank"
objExplorer.ToolBar = 0
objExplorer.StatusBar = 0
objExplorer.Width = ieWidth
objExplorer.Height = ieHeight
objExplorer.Left = 0
objExplorer.Top = 0
Do While (objExplorer.Busy)
Wscript.Sleep 200
Loop
objExplorer.Visible = 1
strOneComps = "Только из списка: "
For Each OneComp in OneComps
If OneComp <> "" Then
strOneComps = strOneComps & OneComp & "; "
Else
strOneComps = strOneComps & " Все"
End If
Next
innerhtml = innerhtml & strOneComps & "<br/>"
strNoComps = "Исключая: "
For Each NoComp in NoComps
If NoComp <> "" Then
strNoComps = strNoComps & NoComp & "; "
Else
strNoComps = strNoComps & " Без исключений"
End If
Next
innerhtml = innerhtml & strNoComps & "<br/><br/>"
objExplorer.Document.Body.InnerHTML = innerhtml
'Старт
On Error Resume Next
For Each objItem in objOU
strComputer = objItem.CN
OneCompFound = 0
For Each OneComp in OneComps
If OneComp <> "" and strComputer = OneComp Then
OneCompFound = 1
ElseIf OneComp = "" Then
OneCompFound = 1
End If
Next
If OneCompFound <> 1 Then
'WScript.Echo """" & strComputer & """,""Не соответствует фильтру"",""Пропущен"""
'innerhtml = innerhtml & """" & strComputer & """,""Не соответствует фильтру OneComps"",""Пропущен""<br/>"
'objExplorer.Document.Body.InnerHTML = innerhtml
Else
NoCompFound = 0
For Each NoComp in NoComps
If NoComp <> "" and strComputer = NoComp Then
NoCompFound = 1
End If
Next
If NoCompFound <> 1 Then
nameping = TestPing(strComputer)
If nameping = 0 Then
'WScript.Echo """" & strComputer & """,""Не пингуется или не доступен"",""Пропущен"""
innerhtml = innerhtml & """" & strComputer & """,""Не пингуется или не доступен"",""Пропущен""<br/>"
objExplorer.Document.Body.InnerHTML = innerhtml
Else
Err.Clear
Set objUser = GetObject("WinNT://" & strComputer & "/" & UserNameRu)
If Err.Number <> 0 Then
'WScript.Echo """" & strComputer & """,""Не найден " & UserNameRu & """,""Пробуем: " & UserNameEn & """"
innerhtml = innerhtml & """" & strComputer & """,""Не найден " & UserNameRu & """,""Пробуем: " & UserNameEn & """<br/>"
objExplorer.Document.Body.InnerHTML = innerhtml
Err.Clear
Set objUser = GetObject("WinNT://" & strComputer & "/" & UserNameEn)
If Err.Number <> 0 Then
'WScript.Echo """" & strComputer & """,""Не найден " & UserNameEn & """,""Пропущен"""
innerhtml = innerhtml & """" & strComputer & """,""Не найден " & UserNameEn & """,""Пропущен""<br/>"
objExplorer.Document.Body.InnerHTML = innerhtml
Else
'WScript.Echo """" & strComputer & """,""Найден " & UserNameEn & """,""Установлен новый пароль"""
innerhtml = innerhtml & """" & strComputer & """,""Найден " & UserNameEn & """,""Установлен новый пароль""<br/>"
objExplorer.Document.Body.InnerHTML = innerhtml
If Test = 0 Then
objUser.SetPassword(NewPasswd)
End If
End If
Else
'WScript.Echo """" & strComputer & """,""Найден " & UserNameRu & """,""Устанавлен новый пароль"""
innerhtml = innerhtml & """" & strComputer & """,""Найден " & UserNameRu & """,""Устанавлен новый пароль""<br/>"
objExplorer.Document.Body.InnerHTML = innerhtml
If Test = 0 Then
objUser.SetPassword(NewPasswd)
End If
End If
End If
Else
'WScript.Echo """" & strComputer & """,""Не соответствует фильтру"",""Пропущен"""
'innerhtml = innerhtml & """" & strComputer & """,""Cоответствует фильтру NoComps"",""Пропущен""<br/>"
'objExplorer.Document.Body.InnerHTML = innerhtml
End If
End If
Next
objExplorer.Document.Body.InnerHTML = innerhtml & "Готово."
'Wscript.Sleep 600000
'objExplorer.Quit
WScript.Quit()
Function TestPing(address)
Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
Set colPings = objWMIService.ExecQuery _
("Select * From Win32_PingStatus where Address = '" & address & "'")
For Each objStatus in colPings
If IsNull(objStatus.StatusCode) or objStatus.StatusCode<>0 Then
TestPing = 0
Else
TestPing = 1
End If
Next
End Function
Function RegExpTest(patrn, strng)
Dim regEx, retVal ' Create variable.
Set regEx = New RegExp ' Create regular expression.
regEx.Pattern = patrn ' Set pattern.
regEx.IgnoreCase = False ' Set case sensitivity.
RegVal = regEx.Test(strng) ' Execute the search test.
RegExpTest = RegVal
End Function