Тема: VBS: Блокировка пользователя в Домене
Очень интересно как можно организовать такое, если даже есть куча ветвей где лежат сами пользователи!
Как им образом можно такое организовать? Желательно что б из файла. Зарание спасибо:)
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Серый форум → Общение → Windows Script Host, HTA (VBScript, JScript) → VBS: Блокировка пользователя в Домене
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Очень интересно как можно организовать такое, если даже есть куча ветвей где лежат сами пользователи!
Как им образом можно такое организовать? Желательно что б из файла. Зарание спасибо:)
Очень интересно как можно организовать такое, если даже есть куча ветвей где лежат сами пользователи!
Как им образом можно такое организовать?..
В чём, собственно, затруднение?
afteroot пишет:Очень интересно как можно организовать такое, если даже есть куча ветвей где лежат сами пользователи!
Как им образом можно такое организовать?..В чём, собственно, затруднение?
Не могу понять как это просто организовать, я не силен в ВБ скриптах!
Загрузите и читайте примеры отюда. А на Ваш вопрос можно будет внятно ответить не раньше, чем Вы его внятно сформулируете.
Загрузите и читайте примеры отюда. А на Ваш вопрос можно будет внятно ответить не раньше, чем Вы его внятно сформулируете.
А что не понятно в том что я хочу найти юзера в АД и заблокировать его учетку! А имена юзеров находятся в файле *.txt
Ну, не «заблокировать», а за«Блокировака»ть
. При чём тут «куча ветвей» и «лежащие в них сами пользователи» тоже не понятно. Про то, где можно прочитать, буде желание — ссылку привёл выше.
Ну, не «заблокировать», а за«Блокировака»ть
. При чём тут «куча ветвей» и «лежащие в них сами пользователи» тоже не понятно. Про то, где можно прочитать, буде желание — ссылку привёл выше.
Ну тогда как просто Блокировать пользователя в АД, используя его имя в файле!
Вы принципиально не хотите читать? Тогда ждите, может кто-то «скопипастит».
... как просто Блокировать пользователя в АД...
Не оставляет меня мысль, что на самом деле Вы хотите не блокировать, а отключить "учётку" (это не одно и то же). Если речь именно об отключении, то в сообщении #5 темы "VBS, блокирование учетной записи пользователя на локальном компьютере" уже имеется соответствующий пример.
Адаптация его к использованию в домене минимальна - в качестве значения переменной strComputerName надо указать NetBIOS-имя любого контроллера домена.
Вы принципиально не хотите читать? Тогда ждите, может кто-то «скопипастит».
Я взял на заметку то что вы скинули, спасибо читаю! Но и тут хотелось бы увидеть варианты!
afteroot пишет:... как просто Блокировать пользователя в АД...
Не оставляет меня мысль, что на самом деле Вы хотите не блокировать, а отключить "учётку" (это не одно и то же). Если речь именно об отключении, то в сообщении #5 темы "VBS, блокирование учетной записи пользователя на локальном компьютере" уже имеется соответствующий пример.
Адаптация его к использованию в домене минимальна - в качестве значения переменной strComputerName надо указать NetBIOS-имя любого контроллера домена.
Эм.. но в домене можно же на любой комп зайти под любой учеткой , значит мне нужно отключить учетку в АД, и не на локальном компьютере а что б ей никто не мог пользоваться!
... но в домене можно же на любой комп зайти под любой учеткой , значит мне нужно отключить учетку в АД, и не на локальном компьютере а что б ей никто не мог пользоваться!
В рассматриваемом случае обращение к "учётке" на контроллере и есть обращение к объекту AD. Или Вы хотите управлять встроенной "учёткой" администратора?
... надо указать NetBIOS-имя любого контроллера домена.
Поправка: если контроллеры - на платформе Win 2008, то (в данной задаче) не годятся контроллеры, исполняющие роль RODC (Read Only DC), т.к. не позволяют вносить изменения в AD.
afteroot пишет:... но в домене можно же на любой комп зайти под любой учеткой , значит мне нужно отключить учетку в АД, и не на локальном компьютере а что б ей никто не мог пользоваться!
В рассматриваемом случае обращение к "учётке" на контроллере и есть обращение к объекту AD. Или Вы хотите управлять встроенной "учёткой" администратора?
Нет не встроенной, объект AD!
Dmitrii пишет:... надо указать NetBIOS-имя любого контроллера домена.
Поправка: если контроллеры - на платформе Win 2008, то (в данной задаче) не годятся контроллеры, исполняющие роль RODC (Read Only DC), т.к. не позволяют вносить изменения в AD.
платформа Win 2003
Нет не встроенной, объект AD
Тогда действуйте, как я Вам уже посоветовал.
afteroot, избегайте излишнего цитирования.
не знаю зачем люди городят леса такие
в cmd всё сводится к одной строке:
net user <название учетки> /domain /active:noне знаю зачем люди городят леса такие
в cmd всё сводится к одной строке:net user <название учетки> /domain /active:no
Вот только единственная проблема с такой строчки! Нужны права Админа, как их тут ввести?
domainname=inputbox("Enter DNS Domain Name" & vbcrlf & "(Leave blank for current domain):")
username=inputbox("Enter username:")
if domainname = "" then
set objRoot = getobject("LDAP://RootDSE")
domainname = objRoot.get("defaultNamingContext")
end if
if username <> "" then
wscript.echo finduser(username,domainname)
end if
Function FindUser(Byval UserName, Byval Domain)
on error resume next
set cn = createobject("ADODB.Connection")
set cmd = createobject("ADODB.Command")
set rs = createobject("ADODB.Recordset")
cn.open "Provider=ADsDSOObject;"
cmd.activeconnection=cn
cmd.commandtext="SELECT ADsPath FROM 'LDAP://" & Domain & "' WHERE sAMAccountName = '" & UserName & "'"
set rs = cmd.execute
if err<>0 then
FindUser="Error connecting to Active Directory Database:" & err.description
else
if not rs.BOF and not rs.EOF then
rs.MoveFirst
FindUser = rs(0)
else
FindUser = "Not Found"
end if
end if
cn.close
end functionВот нашел именно поиск самого пользователя в АД, находит показывает, а как теперь его заблокировать? Сделать Disable Account?
Вот только единственная проблема с такой строчки! Нужны права Админа, как их тут ввести?
Используйте runas
... нашел именно поиск самого пользователя в АД, находит показывает...
Зачем его искать-то, если Вам уже известно имя "учётки"? Если есть сомнения в том, верно ли указано имя, то можно просто "ловить" ошибку подключения. Например:
On Error Resume Next
Set objUser = GetObject("WinNT://" & strComputerName & "/" & strUserName & ",user")
If Err.Number = 0 Then
objUser.AccountDisabled = True
objUser.SetInfo
Else
Err.Clear
End If
On Error GoTo 0... как теперь его заблокировать?
Так ведь уже есть готовый пример: здесь. Что в нём не устраивает?
Так ведь уже есть готовый пример: здесь. Что в нём не устраивает?
Сорри уже все нормально! Решил проблему, просто меня смущало что через Имя компа оно искало, подставил домен, и все заработало ![]()
Только вот теперь возникла необходимость Блокировка не через Логин, а через displayName. Случаем не подскажите уважаемые как еще и такое можно организовать?
afteroot, коллега, либо Вы наконец начнёте применять тэги на регулярной основе (я оформил Ваш пост), либо… будет последнее китайское предупреждение
.
... возникла необходимость Блокировка не через Логин, а через displayName. Случаем не подскажите уважаемые как еще и такое можно организовать?
Либо с помощью ADO (подобно ранее приведённому Вами примеру), либо с помощью интерфейса IADsNameTranslate найти "учётку" в AD, выполнить привязку и, наконец, отключить.
Пример с ADO:
Dim objRoot, strDomain
Dim objUser, strDisplayName, strTemp
Dim objConnection, objCommand, objRSet, strCommandText
Const ADS_SCOPE_SUBTREE = 2
Set objRoot = GetObject("LDAP://RootDSE")
strDomain = objRoot.Get("DefaultNamingContext")
Set objRoot = Nothing
strDisplayName = Trim(InputBox("Выводимое имя пользователя:"))
If Len(strDisplayName) > 0 Then
Set objConnection = CreateObject("ADODB.Connection")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"
Set objCommand = CreateObject("ADODB.Command")
Set objCommand.ActiveConnection = objConnection
strCommandText = "SELECT ADsPath FROM 'LDAP://" & strDomain & _
"' WHERE objectCategory='Person' AND objectClass='User' AND displayName='" & strDisplayName & "'"
objCommand.CommandText = strCommandText
objCommand.Properties("Page Size") = 1000
objCommand.Properties("Timeout") = 30
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
Set objRSet = objCommand.Execute
If objRSet.RecordCount = 1 Then
objRSet.MoveFirst
strTemp = objRSet.Fields("ADsPath").Value
On Error Resume Next
Set objUser = GetObject(strTemp)
If Err.Number = 0 Then
objUser.AccountDisabled = True
objUser.SetInfo
If Err.Number = 0 Then
strTemp = "Учётная запись отключена."
Else
strTemp = "Ошибка отключения учётной записи: " & Err.Number
Err.Clear
End If
Else
strTemp = "Ошибка привязки к найденному объекту: " & Err.Number
Err.Clear
End If
Set objUser = Nothing
Else
strTemp = "Учётная запись пользователя " & UCase(strDisplayName) & " не обнаружена."
End If
Set objRSet = Nothing
Set objCommand = Nothing
objConnection.Close
Set objConnection = Nothing
WScript.Echo strTemp
End If
WScript.Quit 0Пример с IADsNameTranslate:
Dim objWSNet, strDomain
Dim objTranslate, objUser, strDisplayName, strTemp
Const ADS_NAME_INITTYPE_DOMAIN = 1
Const ADS_NAME_TYPE_DISPLAY = 4
Const ADS_NAME_TYPE_1779 = 1
strDisplayName = Trim(InputBox("Выводимое имя пользователя:"))
If Len(strDisplayName) > 0 Then
Set objWSNet = CreateObject("WScript.Network")
strDomain = objWSNet.UserDomain
Set objWSNet = Nothing
On Error Resume Next
Set objTranslate = CreateObject("NameTranslate")
If Err.Number = 0 Then
objTranslate.Init ADS_NAME_INITTYPE_DOMAIN, strDomain
If Err.Number = 0 Then
objTranslate.Set ADS_NAME_TYPE_DISPLAY, strDisplayName
If Err.Number = 0 Then
Set objUser = GetObject("LDAP://" & objTranslate.Get(ADS_NAME_TYPE_1779))
If Err.Number = 0 Then
objUser.AccountDisabled = True
objUser.SetInfo
If Err.Number = 0 Then
strTemp = "Учётная запись отключена."
Else
strTemp = "Ошибка отключения учётной записи: " & Err.Number
Err.Clear
End If
Set objUser = Nothing
Else
strTemp = "Ошибка привязки к найденному объекту: " & Err.Number
Err.Clear
End If
Else
strTemp = "Ошибка транслирования: " & Err.Number
Err.Clear
End If
Else
strTemp = "Ошибка привязки к источнику транслирования: " & Err.Number
Err.Clear
End If
Set objTranslate = Nothing
Else
strTemp = "Ошибка создания объекта ""NameTranslate"": " & Err.Number
Err.Clear
End If
WScript.Echo strTemp
End If
WScript.Quit 0Дмитрий ОГРОМНОЕ СПАСИБО! Выручили!
Если не секрет откуда Инфу берёте или книги какие лучше почитать? За рание спасибо!
... откуда Инфу берёте...
1. Полнее, чем MSDN, источника не существует.
2. alexii уже указал Вам на коллекцию ссылок, выбирайте оттуда, что требуется. Ссылка на MSDN, например,- самая первая в первом же сообщении этой коллекции.
OFF: Я всем рекомендую загружать локальную базу (OFF: MSDN по-русски — если уже нет более свежей), весьма помогает.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться