Ru-Board.club
← Вернуться в раздел «В помощь системному администратору»

» Автоматизация администрирования

Автор: serstr
Дата сообщения: 03.05.2006 12:06
Это я осилил, но вот теперь есть немного другая задача. также в экселе, вытянуть из АД список всех групп и всех юзеров. В виде двух столбцов первый столбец название группы, второй юзеры которые состоят в этой группе (каждый юзер в отдельной ячейке). Пример: groupA -> user1, groupA->User2, groupA->User3, groupB->user4, groupB->user1, groupC->User2 ну и т.д.
Помогите составить такой код в экселе.
Автор: FreemanRU
Дата сообщения: 03.05.2006 12:41
serstr
У группы есть свойтсво "member", в котором находится массив CN всех её членов.
Соотвественно тебе надо сделать SELECT member FROM AD WHERE objectClass='group'
Через objRecordset.MoveNext перебираем группы, и в каждой группе через For Each перебираем членов группы.

ЗЫ Поставь себе adsiedit.msc и SUPPORT TOOLS, многое станет понятнее.
Автор: serstr
Дата сообщения: 03.05.2006 13:02
Я просто не совсем понимаю, как происходит вызов из АД.Вот в предыдущем примере есть такие строки
CommandText = "Select cn, memberOf, name" 'SecurityGroups,
CommandText = CommandText + " from 'LDAP://DC=DOM,DC=com'"
CommandText = CommandText + " where objectClass='person' and objectClass<>'computer'"
CommandText = CommandText + " ORDER BY cn"

Set objRecordset = CreateObject("ADODB.Recordset")
objRecordset.Open CommandText, objConnection

В том и проблема не знаю как это перенести на группы? Как сформировать этот запрос в АД? И где можно посмотреть названия objectClass из АД?
Автор: FreemanRU
Дата сообщения: 03.05.2006 13:09
serstr

Цитата:
CommandText = "Select cn, member"
CommandText = CommandText + " from 'LDAP://DC=DOM,DC=com'"
CommandText = CommandText + " where objectClass='group'

Set objRecordset = CreateObject("ADODB.Recordset")
objRecordset.Open CommandText, objConnection

Автор: serstr
Дата сообщения: 03.05.2006 16:04
Спасибо большое все получилось!!!!
Автор: Sk1f
Дата сообщения: 04.05.2006 16:17
Вопрос - можно реализовать в функции вызов другой функции. Т.е.:


Цитата:
Function GO()
...
End Function
Function Men()
Call GO()
End Function


Автор: FreemanRU
Дата сообщения: 04.05.2006 16:22
Sk1f
Конечно... а в чем проблема?
Можно и без Call.
Автор: Sk1f
Дата сообщения: 04.05.2006 16:39
да сцуко не хочет выполняться.


Добавлено:

Цитата:

Sub CrGroup(strN1,strPath, t)
Dim objCr,objGr

Set objGr = GetObject("LDAP://" & strPath)
Set objCr = objGr.Create("Group", "cn="& strN1)
objCr.Put "sAMAccountName", ""& strN1
If t=0 Then
objCr.Put "groupType", ADS_GROUP_TYPE_GLOBAL_GROUP Or ADS_GROUP_TYPE_SECURITY_ENABLED
ElseIf t=1 Then
objCr.Put "groupType",ADS_GROUP_TYPE_LOCAL_GROUP Or ADS_GROUP_TYPE_SECURITY_ENABLED
End If
objCr.SetInfo
objGroup.SetInfo
End Sub

'----------------------------------------------------------------------------------'
Function GroupD(group_name,path,n)

strPath = Replace(path, "CN=" & group_name & ",","") ' находим путь по которому будет создаваться группа

stroka = ".*\sPR$"
objfin=group_name 'cn
find = objfin.test(stroka)

If n=0 And find = False Then
GlobalGroup = group_name & " KT"
'Call CrGroup(GlobalGroup, strPath,0)

ElseIf n=1 And find = False Then
LocalDomainGroup =group_name & " KT"
'Call CrGroup(LocalDomainGroup, strPath,1)
End If
End Function


Добавлено:
ламерский скрипт жутко, но не относитесь предвзято - я только учусь!
Автор: FreemanRU
Дата сообщения: 04.05.2006 17:23
Sk1f
А точка входа в скрипт у тебя где? То что ты привел - 2 функици, не более... кто эти функции будет вызывать?

ЗЫ А что надо сделать вообще?
Автор: Sk1f
Дата сообщения: 05.05.2006 08:38
FreemanRU извиняюсь, это только часть скрипта, весь скрипт не хотел писать. У меня просто до вызова этих функций все отрабатывается и WScript.echo показывает все то как надо и должно будет использоваться в качестве параметров этих ф-ций, но вот только сами ф-ции отрабатываться не хотят.
Весь скрипт:

Цитата:

Dim WshNet, WshShell, RootDSE
Dim objOU
Dim LocalDomainGroup, GlobalGroup, LocalDomainGroup1, GlobalGroup1
Dim strResourceOUDN, strResource
Dim strResourceGr
Dim disName

' Const for Group
Const ADS_GROUP_TYPE_LOCAL_GROUP = &h4
Const ADS_GROUP_TYPE_SECURITY_ENABLED = &h80000000
Const ADS_GROUP_TYPE_GLOBAL_GROUP = &h2
Const ADS_PROPERTY_APPEND= 3

Set WshShell = Wscript.CreateObject("Wscript.Shell")
Set WshNet = WScript.CreateObject("WScript.Network")
Set RootDSE = GetObject("LDAP://RootDSE")
Set DefaultDomain = GetObject("LDAP://" & RootDSE.Get("DefaultNamingContext"))
WScript.Echo DefaultDomain.distinguishedName
WScript.Echo VbCrLf
On Error Resume Next

'----------------------------------------------------------------------------------'
' Создание группы
Sub CrGroup(strN1,strPath, t)

Set objGr = GetObject("LDAP://" & strPath)
Set objCr = objGr.Create("Group", "cn="& strN1)
objCr.Put "sAMAccountName", ""& strN1
If t=0 Then
objCr.Put "groupType", ADS_GROUP_TYPE_GLOBAL_GROUP Or ADS_GROUP_TYPE_SECURITY_ENABLED
ElseIf t=1 Then
objCr.Put "groupType",ADS_GROUP_TYPE_LOCAL_GROUP Or ADS_GROUP_TYPE_SECURITY_ENABLED
End If
objCr.SetInfo
objGroup.SetInfo
End Sub

'----------------------------------------------------------------------------------'
' Проверка на PR
Function GroupPR(group_name,path,n)
stroka = ".*\sPR$"
objfin=group_name ' cn
find = objfin.test(stroka) ' ,было выяснено, что ошибка в этом месте. Но решить не могу
If n=0 And find = False Then
strPath = Replace(path, "CN=" & group_name & ",","")
GlobalGroup = "" & group_name & " PR"
WScript.Echo strPath
WScript.Echo GlobalGroup
'Call CrGroup(GlobalGroup, strPath,0)
ElseIf n=1 And find = False Then
LocalDomainGroup ="" & group_name & " PR"
'Call CrGroup(LocalDomainGroup, strPath,1)
End If
On Error goto 0
End Function

'----------------------------------------------------------------------------------'
'----------------------------------------------------------------------------------'

strResourceOUDN = "OU=Test," & RootDSE.Get("DefaultNamingContext")
Set objOU = GetObject("LDAP://" & strResourceOUDN)
objOU.Filter = Array("organizationalUnit")

' Получение OU 1-го уровня
For Each oOU In objOU
strResource = oOU.distinguishedName

'WScript.Echo strResource

' Получение групп в OU 1-го уровня
Set objListGrp1 = GetObject("LDAP://" & strResource)
ObjListGrp1.Filter = Array("Group")
For Each objGroup In objListGrp1
intGrpType = objGroup.get("GroupType")
If intGrpType And ADS_GROUP_TYPE_GLOBAL_GROUP Then
strGlobalname = objGroup.cn
strGlobalpath = objGroup.distinguishedName
'WScript.Echo strGlobalname
'WScript.Echo strGlobalpath

' Call GroupPR(objGroup.cn, objGroup.distinguishedName, 0) '


ElseIf intGrpType And ADS_GROUP_TYPE_LOCAL_GROUP Then
strLocalResGR = objGroup.distinguishedName
strLocalname = objGroup.cn
LocalGrp = objGroup
'WScript.Echo "Local " & strLocalname
'WScript.Echo "Local " & strLocalResGR
'Call GroupPR(strLocalname, strLocalResGR, 1)
End If
Next
Next

А как правильно работать с Regular Expressions в VBscript я не нашел. Поэтому кто что сможет помочь.
Мне фактически нужно сделать проверку на наличие в списке группы выражения " PR"

Автор: urel
Дата сообщения: 05.05.2006 12:13
попробуй без этого =)
например так - instr(stroka," PR")>0

может тут что найдешь

Добавлено:
пример от туда

Цитата:
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.
retVal = regEx.Test(strng) ' Execute the search test.
If retVal Then
RegExpTest = "One or more matches were found."
Else
RegExpTest = "No match was found."
End If
End Function

WScript.Echo RegExpTest("is.", "IS1 is2 IS3 is4")
Автор: AleXeyS55
Дата сообщения: 05.05.2006 14:11
Задача встала такая: нужно скрипт который бы на ПК с ОС 2000\ХР с помощью скрипта блокировал все записи в группе локальных Администраторов кроме одной и сменить пароль этой одной записи, допустим пусть это будет запись admin, на указанный в этом же скрипте. Есть AD.
Можете помочь?
Автор: inetimon
Дата сообщения: 05.05.2006 15:01
Помогите кто может.
Как запустить скрипт у пользователей, которые имеют права пользователя, от имени к примеру локального Администратора.
Можно с помощью (RUNAS) но там проблема с паролем (его надо вводить после запуска) а если написать BAT/CMD по пароль будет лежать в открытом виде.

Надо прямо в скрипте задать, да еще и пароль зашифровать.

К примеру скрипт по закрытию всех пользовательских шар:

Цитата:
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colShares = objWMIService.ExecQuery _
("Select * from Win32_Share Where Type = 0")
For Each objShare in colShares
objShare.Delete
Next


AD нету.
Автор: FreemanRU
Дата сообщения: 05.05.2006 15:34
inetimon
Сделай vbs-скрипт, а его зашифруй.
Автор: inetimon
Дата сообщения: 05.05.2006 18:18
Так проблема в том что я не знаю, как в скрипте задать чтобы запускался под конкретным именем. Пароль будет виден в CMD/BAT, который придется положить в общедоступную папку.
Конечно, можно сделать с CMD/BAT -- EXE/COM, но мне кажется, что должно быть решение по проще.
Неужели невозможно прямо в скрипте задать под каким пользователем будет запущен скрипт.


Добавлено:
AleXeyS55
Можно сделать батник используя команду NET GROUP и NET USER. Сначала заблокировать все учетки в группе Администраторов а потом разблокировать конкретную (Admin) и поменять пароль.
Автор: Uriu
Дата сообщения: 06.05.2006 07:03
inetimon
Прочитайте мой пост на странице 58 этой ветки. Нужно использовать:

'Создаем объект SWbemLocator
Set objLocator = CreateObject("WbemScripting.SWbemLocator")
'Соединяемся с пространством имен WMI от имени заданной учетной записи
Set objService = objLocator.ConnectServer(strComputer, strNamespace, strUser, strPassw)
Автор: AleXeyS55
Дата сообщения: 06.05.2006 07:59
Что то я не увидел в NET GROUP возможности заблокировать группу, или в NET USER заблокирвоать всех пользователей определенной группы. Есть только возможность заблокировать отдельного пользователя. Но део в том что я не могу заранее знать какие пользователи будут в группе Администраторы. Как быть?
А так свет полезный, спасибо.
Автор: listadm
Дата сообщения: 06.05.2006 08:54
Помогите решить задачу:
есть текстовый файл такового содержания:
*********************
ХХХХХХХХХХХХХХХХХХХХХ
ХХХХХХХХХХХХХХХ
!!!!!!!!!!!!!!ХХХХХХХХХХХХ

ХХХХХХХХХХХХХХХХХХХ
ХХХХХХХХХХХХХХХХХХХХ
************************

Нужно удалить пустую строку в этом файле.
Автор: inetimon
Дата сообщения: 06.05.2006 09:01
Uriu
Ваш пост конечно хорош, но если я не ошибаюсь, то локально это не работает. А мне надо локально запускать скрипт.

Добавлено:
AleXeyS55
Тогда можно запросить список пользователей в группе, записать это все в файл, а потом блокировать по очереди подставляя пользователей из файла. Вот как запутано.
Механизм по подставл. из файла где-то был в этой ветке.
Автор: AleXeyS55
Дата сообщения: 06.05.2006 10:30
Команда:
C:\>net group
Эта команда может использоваться только для контроллера домена Windows.

Для вызова дополнительной справки наберите NET HELPMSG 3515.

Вот такие пироги
Автор: alexxxn
Дата сообщения: 06.05.2006 10:46
для локальных групп можно использовать - NET LOCALGROUP
Автор: Sk1f
Дата сообщения: 06.05.2006 11:30
Что-то я непонял в VB такая штука как я помню есть, а здесь непонятно.
Пример1:

Цитата:
For each k in array(k)
Next
Можно ли так
For each k in array(k)
Next k


Пример2:

Цитата:
If k= then
else
End if
Можно ли так
If k= then
else
End if k


У меня получилось большое кол-во циклов и хотелось бы знать можно ли как-нибудь обозначать, что к чему относится кроме как " ' ".

Автор: AleXeyS55
Дата сообщения: 06.05.2006 11:50
Ага, NET LOCALGROUP, но группу заблокировать нельзя и удалить оттуда всех юзеров, тоже не так то просто. Удалить стандартную группу, в данном случае Администраторы, тоже едва ли получится
Какй выход тогда? Конечно если бы группу блокировать можно было, то все бы намного упростилось!
Автор: Uriu
Дата сообщения: 07.05.2006 05:42
inetimon
Конечно на локальном компьютере соединение с WMI происходит от имени текущей учетной записи. По другому и быть не может. Загружается ведь только профиль текущего пользователя.
Не понятно зачем запускать скрипт для другого пользователя, профиль которого не загружен? ИМХО.
Можно ведь просто назначить логон скрипт для любого пользователя (для каждого свой). Пароль вводить вообще не придется.
Автор: eldo
Дата сообщения: 08.05.2006 00:12
Скажите, а возможно ли с помощью whs управлять NetBIOS (например получить все имена связанные с данным LANA, удалить какие-то имена из таблицы имен NetBIOS) и тому подобное.
Спасибо

PS цель - организовать фильтрацию NetBIOS траффика. например: разрешить на сервере виндовс мессенджер только для одной группы IP-адресов, Oracle (если не ошибаюсь, он использует NetBIOS) - только для другой группы, а файл-сервер - только для третьей группы. Если кто-нибудь знает как вообще это можно сделать, подскажите пожалуйста.
Автор: AleXeyS55
Дата сообщения: 10.05.2006 07:48
Все, сделал
Автор: serstr
Дата сообщения: 10.05.2006 09:13
Подскажите как в VBS присвоить переменно значение которое содержит "..."
Например переменной temp присвоить значение (-GCMConfigFile "Q:\BAS\bas.ini")

Это нужно для правки реестра, надо создать ключ, в котором бы значение было = (-GCMConfigFile "Q:\BAS\bas.ini")

Добавлено:
И еще вопрос.
Как средствами VBS замапить юзеру сетевой принтер и приэтом повесить его на LPT2 порт?
Автор: AleXeyS55
Дата сообщения: 10.05.2006 11:31
Сделал вот так:

Цитата:

showmbrs Администраторы > users.txt
for /f "skip=2" %I in (users.txt) do net user %I /active:no
net user Administrator /active:YES
net user Administrator "123"

Но тут проблема есть: он заблокирует записи полностью, а в идеале мне нужно удалить записи из определенной группы, а именно Администраторы, и после этого получается добавит пользователя admin. И записи только локальные, не AD\...
Можете кто нибудь подсказать как это сделать?
Автор: FreemanRU
Дата сообщения: 10.05.2006 12:34
AleXeyS55
Deleting a User from a Local Group

Код:
strComputer = "MyComputer"
Set objGroup = GetObject("WinNT://" & strComputer & "/Administrators,group")
Set objUser = GetObject("WinNT://" & strComputer & "/kenmyer,user")
objGroup.Remove(objUser.ADsPath)
Автор: serstr
Дата сообщения: 10.05.2006 12:48

Цитата:
Подскажите как в VBS присвоить переменно значение которое содержит "..."
Например переменной temp присвоить значение (-GCMConfigFile "Q:\BAS\bas.ini")

Это нужно для правки реестра, надо создать ключ, в котором бы значение было = (-GCMConfigFile "Q:\BAS\bas.ini")

Добавлено:
И еще вопрос.
Как средствами VBS замапить юзеру сетевой принтер и приэтом повесить его на LPT2 порт?


Неужели нет никаких идей насчет моей проблемы?

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

Предыдущая тема: Зеркалирование дисков Win2000


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.