Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » В помощь системному администратору » Автоматизация администрирования

Модерирует : lynx, Crash_Master, dg, emx, ShriEkeR

emx (13-12-2006 21:07): http://forum.ru-board.com/topic.cgi?forum=8&topic=19088#1  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101

   

ooptimum



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
 

                               Коллеги-администраторы  ....  


Часть 1


Думаю каждый из вас сталкивался с необходимостью выполнять некие несложные рутинные операции, на котороые уходит много драгоценного времени.
 Например, создать определенную структуру каталогов для каждого пользователя домена, изменить некие параметры в профилях всех или части пользователей, изменить полномочия/владельца однотипных файлов в разных каталогах т.д.  
Я, как сисадмин, тоже не раз был вынужден делать все это.  Руками делать это тоскливо и муторно, как вы понимаете. Должен заметить, что по неким "религиозным" убеждениям я всегда старался избегать любых отношений с бейсиком и его производными. Еще мой отец учил меня не иметь с ним никаких дел. Буквально. А теперь я учу своего сына тому же. Но, тем не менее, полностью избежать этого, по всей видимости, невозможно, тем более, что бейсик от M$ сейчас уже далеко не та "лапша", которой он был изначально, а современный структурированный язык, нашедший множество применений. Похоже, что для меня в очередной раз настала пора выучить еще что-то. Знаете, как курильщик много раз безуспешно пытается бросить курить, так и я не раз пытался подступиться к изучению VBScript, но пока никак не одолел. Лень, знаете ли. А инструмент в делах административных был бы весьма пользительный, должен заметить, для быстрого написания всякого рода скриптов.

 
    Внимание   !  !  !  

  • Поскольку данный топ весьма не мал, не забывайте  использовать "версию для печати" для более удобного поиска по теме. А также МЕГА ПОИСКОВИК от NEPa

  • Дабы не раздувать топ,  примеры своих  скриптов  заключаем в тег  "more"

Консольные команды. Командный интерпретатор

Windows Script Host (WSH) &  VBScript  &  JScript


Вышеперечисленные буки можно  взять здесь

    ТOOLS :
  1. Autoit+readme.rus
  2. Scriptologic
  3. AutoMate
  4. KIXTART
  5. nnCron-Планировщик с поддержкой скриптового языка --  РЕКОМЕНДУЮ
  6. WGET, GREP, GETMAIL, BLAT for Windows замечательные консольные утилиты
  7. 4dos/4nt -- отличная замена стандартного коммандного интерпретатора  
  8. JudoScript - java подобный скриптовый язык с исходниками

    Дружественные темы :
  1. Автоматическая (unattended) установка Windows
  2. Интересные команды при работе с Linux
  3. Отличный сайт по скриптингу, и не только
  4. Использование KIX
  5. Использование WMI

 
>>HOW -  TO:
Создается по материалам данного топа

 
Надеюсь данная тема будет полезна для Вас.
 Предложения по реформированию шапки принимаю в ПМ Jovanotti

 

Всего записей: 2898 | Зарегистр. 30-05-2002 | Отправлено: 08:55 13-12-2002 | Исправлено: FreemanRU, 17:29 11-12-2006
FreemanRU



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
serstr

Цитата:
Cells(n, m).Value = strGroupName.Value  

Дык по идеи так:

Код:
 
Cells(n, m).Value = strGroupName
 


----------
Если не получается с первого раза - прочти инструкцию. (с)
"Откуда нам знать, что такое война, если мы не знаем мира..."(с)
Записки

Всего записей: 3795 | Зарегистр. 16-07-2004 | Отправлено: 11:04 03-05-2006
serstr

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Это я осилил, но вот теперь есть немного другая задача. также в экселе, вытянуть из АД список всех групп и всех юзеров. В виде двух столбцов первый столбец название группы, второй юзеры которые состоят в этой группе (каждый юзер в отдельной ячейке). Пример:  groupA -> user1, groupA->User2, groupA->User3, groupB->user4, groupB->user1, groupC->User2 ну и т.д.
Помогите составить такой код в экселе.

Всего записей: 32 | Зарегистр. 26-04-2006 | Отправлено: 13:06 03-05-2006
FreemanRU



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
serstr
У группы есть свойтсво "member", в котором находится массив CN всех её членов.
Соотвественно тебе надо сделать SELECT member FROM AD WHERE objectClass='group'
Через objRecordset.MoveNext перебираем группы, и в каждой группе через For Each перебираем членов группы.
 
ЗЫ Поставь себе adsiedit.msc и SUPPORT TOOLS, многое станет понятнее.

----------
Если не получается с первого раза - прочти инструкцию. (с)
"Откуда нам знать, что такое война, если мы не знаем мира..."(с)
Записки

Всего записей: 3795 | Зарегистр. 16-07-2004 | Отправлено: 13:41 03-05-2006
serstr

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Я просто не совсем понимаю, как происходит вызов из АД.Вот в предыдущем примере есть такие строки  
   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 из АД?

Всего записей: 32 | Зарегистр. 26-04-2006 | Отправлено: 14:02 03-05-2006 | Исправлено: serstr, 14:08 03-05-2006
FreemanRU



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
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  
 



----------
Если не получается с первого раза - прочти инструкцию. (с)
"Откуда нам знать, что такое война, если мы не знаем мира..."(с)
Записки

Всего записей: 3795 | Зарегистр. 16-07-2004 | Отправлено: 14:09 03-05-2006
serstr

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Спасибо большое все получилось!!!!

Всего записей: 32 | Зарегистр. 26-04-2006 | Отправлено: 17:04 03-05-2006
Sk1f



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Вопрос - можно реализовать в функции вызов другой функции. Т.е.:
 

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

 

Всего записей: 198 | Зарегистр. 04-04-2006 | Отправлено: 17:17 04-05-2006
FreemanRU



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Sk1f
Конечно... а в чем проблема?
Можно и без Call.

----------
Если не получается с первого раза - прочти инструкцию. (с)
"Откуда нам знать, что такое война, если мы не знаем мира..."(с)
Записки

Всего записей: 3795 | Зарегистр. 16-07-2004 | Отправлено: 17:22 04-05-2006
Sk1f



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
да сцуко не хочет выполняться.  
 
 
Добавлено:

Цитата:
 
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
 

 
Добавлено:
ламерский скрипт жутко, но не относитесь предвзято - я только учусь!

Всего записей: 198 | Зарегистр. 04-04-2006 | Отправлено: 17:39 04-05-2006 | Исправлено: Sk1f, 17:53 04-05-2006
FreemanRU



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Sk1f
А точка входа в скрипт у тебя где? То что ты привел - 2 функици, не более... кто эти функции будет вызывать?
 
ЗЫ А что надо сделать вообще?

Всего записей: 3795 | Зарегистр. 16-07-2004 | Отправлено: 18:23 04-05-2006
Sk1f



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
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"
 

Всего записей: 198 | Зарегистр. 04-04-2006 | Отправлено: 09:38 05-05-2006 | Исправлено: Sk1f, 12:59 05-05-2006
urel

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
попробуй без этого =)  
например так - 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")

Всего записей: 292 | Зарегистр. 16-09-2004 | Отправлено: 13:13 05-05-2006 | Исправлено: urel, 13:22 05-05-2006
AleXeyS55



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Задача встала такая: нужно скрипт который бы на ПК с ОС 2000\ХР с помощью скрипта блокировал все записи в группе локальных Администраторов кроме одной и сменить пароль этой одной записи, допустим пусть это будет запись admin, на указанный в этом же скрипте. Есть AD.
Можете помочь?

Всего записей: 227 | Зарегистр. 30-01-2006 | Отправлено: 15:11 05-05-2006
inetimon



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Помогите кто может.
Как запустить скрипт у пользователей, которые имеют права пользователя, от имени к примеру локального Администратора.
Можно с помощью (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 нету.

Всего записей: 41 | Зарегистр. 10-11-2004 | Отправлено: 16:01 05-05-2006
FreemanRU



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
inetimon
Сделай vbs-скрипт, а его зашифруй.

----------
Если не получается с первого раза - прочти инструкцию. (с)
"Откуда нам знать, что такое война, если мы не знаем мира..."(с)
Записки

Всего записей: 3795 | Зарегистр. 16-07-2004 | Отправлено: 16:34 05-05-2006
inetimon



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Так проблема в том что я не знаю, как в скрипте задать чтобы запускался под конкретным именем. Пароль будет виден в CMD/BAT, который придется положить в общедоступную папку.  
Конечно, можно сделать с CMD/BAT -- EXE/COM, но мне кажется, что должно быть решение по проще.
Неужели невозможно прямо в скрипте задать под каким пользователем будет запущен скрипт.
 
 
Добавлено:
AleXeyS55
Можно сделать батник используя команду NET GROUP и NET USER. Сначала заблокировать все учетки в группе Администраторов а потом разблокировать конкретную (Admin) и поменять пароль.

Всего записей: 41 | Зарегистр. 10-11-2004 | Отправлено: 19:18 05-05-2006
Uriu

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
inetimon
Прочитайте мой пост на странице 58 этой ветки. Нужно использовать:  
 
'Создаем объект SWbemLocator  
Set objLocator = CreateObject("WbemScripting.SWbemLocator")  
'Соединяемся с пространством имен WMI от имени заданной учетной записи  
Set objService = objLocator.ConnectServer(strComputer, strNamespace, strUser, strPassw)  

Всего записей: 340 | Зарегистр. 25-11-2004 | Отправлено: 08:03 06-05-2006
AleXeyS55



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Что то я не увидел в NET GROUP возможности заблокировать группу, или в NET USER заблокирвоать всех пользователей определенной группы. Есть только возможность заблокировать отдельного пользователя. Но део в том что я не могу заранее знать какие пользователи будут в группе Администраторы. Как быть?
А так свет полезный, спасибо.

Всего записей: 227 | Зарегистр. 30-01-2006 | Отправлено: 08:59 06-05-2006
listadm

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Помогите решить задачу:
есть текстовый файл такового содержания:
*********************
ХХХХХХХХХХХХХХХХХХХХХ
ХХХХХХХХХХХХХХХ
!!!!!!!!!!!!!!ХХХХХХХХХХХХ
 
ХХХХХХХХХХХХХХХХХХХ
ХХХХХХХХХХХХХХХХХХХХ
************************
 
Нужно удалить пустую строку в этом файле.

Всего записей: 6 | Зарегистр. 06-05-2006 | Отправлено: 09:54 06-05-2006
inetimon



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Uriu
Ваш пост конечно хорош, но если я не ошибаюсь, то локально это не работает. А мне надо локально запускать скрипт.
 
Добавлено:
AleXeyS55
Тогда можно запросить список пользователей в группе, записать это все в файл, а потом блокировать по очереди подставляя пользователей из файла. Вот как запутано.  
Механизм по подставл. из файла где-то был в этой ветке.

Всего записей: 41 | Зарегистр. 10-11-2004 | Отправлено: 10:01 06-05-2006
   

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101

Компьютерный форум Ru.Board » Компьютеры » В помощь системному администратору » Автоматизация администрирования
emx (13-12-2006 21:07): http://forum.ru-board.com/topic.cgi?forum=8&topic=19088#1


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru