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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
Sk1f



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Уже понял в чем ошибка  
 
Но как сделать двойной фильтр?
Т.е. чтобы извлекать только Глобальные группы!
 
 
 
 

Всего записей: 198 | Зарегистр. 04-04-2006 | Отправлено: 15:52 19-04-2006 | Исправлено: Sk1f, 15:58 19-04-2006
urel

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ты можешь проверять проверять по groupType
не ленись, читай доки - они рулез!!!
хотя в примере  
List the General Properties of a Group
не хватает intGroupType=objGroup.get("GroupType")
 
 
 
Добавлено:
я как т о на шл для себя, VbsEdit его только и юзаю, найти можно в варезнике

Всего записей: 292 | Зарегистр. 16-09-2004 | Отправлено: 16:09 19-04-2006
Sk1f



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Что нахожу все читаю, но я пока newbie и ошибаюсь.  
 
А так могу сказать, что urel большую кружку темной Крушовицы я бы поставил!!!!
 

Всего записей: 198 | Зарегистр. 04-04-2006 | Отправлено: 16:21 19-04-2006
urel

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Sk1f
ок =)
Microsoft Technet Scriptcenter
там есть такой экзэмпл List the General Properties of a Group да и много других

Цитата:
 
On Error Resume Next
 
Const ADS_GROUP_TYPE_GLOBAL_GROUP = &h2
Const ADS_GROUP_TYPE_LOCAL_GROUP = &h4
Const ADS_GROUP_TYPE_UNIVERSAL_GROUP = &h8
Const ADS_GROUP_TYPE_SECURITY_ENABLED = &h80000000
 
Set objGroup = GetObject _
    ("LDAP://cn=Scientists,ou=R&D,dc=NA,dc=fabrikam,dc=com")
 
WScript.Echo "Name: " & objGroup.Name
WScript.Echo "SAM Account Name: " & objGroup.SAMAccountName
WScript.Echo "Mail: " & objGroup.Mail
WScript.Echo "Info: " & objGroup.Info
intGroupType=objGroup.get("GroupType") ' этого нехватает в оригинале  
If intGroupType AND ADS_GROUP_TYPE_LOCAL_GROUP Then
    WScript.Echo "Group scope: Domain local"
ElseIf intGroupType AND ADS_GROUP_TYPE_GLOBAL_GROUP Then
    WScript.Echo "Group scope: Global"
ElseIf intGroupType AND ADS_GROUP_TYPE_UNIVERSAL_GROUP Then
    WScript.Echo "Group scope: Universal"
Else
    WScript.Echo "Group scope: Unknown"
End If
 
If intGroupType AND ADS_GROUP_TYPE_SECURITY_ENABLED Then
    WScript.Echo "Group type: Security group"
Else
    WScript.Echo "Group type: Distribution group"
End If
 
For Each strValue in objGroup.Description
    WScript.Echo "Description: " & strValue
Next

 
надеюсь это поможет

Всего записей: 292 | Зарегистр. 16-09-2004 | Отправлено: 17:01 19-04-2006
Sk1f



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Угу как раз в нем и сижу весь день.
 

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



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Доброе утро.  
И уже назрел вопрос по поводу фильтра.....так сказать пошла вторая кружка  
 

Цитата:
 
 Set objListGroup = GetObject("LDAP://" & strResource)
    ObjListGroup.Filter = Array("Group")
    intGroupType = objListGroup.Get("GroupType")    
  If intGroupType AND ADS_GROUP_TYPE_GLOBAL_GROUP Then
     objGlobalGr= ObjListGroup
    For Each oGroup In objGlobalGr
    strResourceGr = oGroup.distinguishedName
     WScript.Echo strResourceGr
     Else
   WScript.Echo "Group scope: Domain local"
   End If
 

 
Так или я в чем-то не правильно понимаю If else ....End if?  
И еще интересен такой момент, можно ли не используя If извлечь именно нужные группы? Т.е. возможна ли структура:
 
   strResourceGr=oGroup.distinguishedname
   Set objGroupType = GetObject("LDAP://" & strResourceGr)
       intGroupType = objGroupType.Get("GroupType")
       intGroupType.Filter =  Array ("ADS_GROUP_TYPE_GLOBAL_GROUP")
 
 
 
 
 

Всего записей: 198 | Зарегистр. 04-04-2006 | Отправлено: 11:18 20-04-2006 | Исправлено: Sk1f, 12:14 20-04-2006
urel

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Sk1f
наверн немного не так =) ты выбираешь подряд все группы и иж проверяешь если да - то работаешь
 

Цитата:
Const ADS_GROUP_TYPE_GLOBAL_GROUP = &h2
Const ADS_GROUP_TYPE_LOCAL_GROUP = &h4
Const ADS_GROUP_TYPE_UNIVERSAL_GROUP = &h8
Const ADS_GROUP_TYPE_SECURITY_ENABLED = &h80000000
 
Set RootDSE = GetObject("LDAP://RootDSE")
 
strResourceOUDN = "OU=Test," & RootDSE.Get("DefaultNamingContext")
Set objOU = GetObject("LDAP://" & strResourceOUDN)
objOU.Filter = Array("group")  
For Each objGroup In objOU
    intGroupType=objGroup.get("GroupType")
    If intGroupType AND ADS_GROUP_TYPE_GLOBAL_GROUP Then
        WScript.Echo    objGroup.name  
    End If
Next

 
в этой контрукции так нельзя, вроде как.
 
 
Добавлено:
но можно так:

Цитата:
On Error Resume Next
 
Const ADS_SCOPE_SUBTREE = 2
 
Set objConnection = CreateObject("ADODB.Connection")
Set objCommand =   CreateObject("ADODB.Command")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"
Set objCommand.ActiveConnection = objConnection
Set RootDSE = GetObject("LDAP://RootDSE")
 
strResourceOUDN = "OU=Test," & RootDSE.Get("DefaultNamingContext")
 
objCommand.Properties("Page Size") = 1000
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE  
 
objCommand.CommandText = _
    "SELECT cn FROM 'LDAP://" & strResourceOUDN & "' WHERE " _
        & "objectCategory='group' AND " _
            & "groupType= -2147483646 "  
Set objRecordSet = objCommand.Execute
objRecordSet.MoveFirst
 
Do Until objRecordSet.EOF
    Wscript.Echo objRecordSet.Fields("cn").Value
    objRecordSet.MoveNext
Loop

 
PS: все это из The Portable Script Center

Всего записей: 292 | Зарегистр. 16-09-2004 | Отправлено: 14:13 20-04-2006
Sk1f



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
угу это я видел, но не хотел пока лезть в ADSI.  
Поэтому хотел обойти этот метод стороной и попытаться сделать по другому

Всего записей: 198 | Зарегистр. 04-04-2006 | Отправлено: 14:31 20-04-2006 | Исправлено: Sk1f, 15:11 20-04-2006
FreemanRU



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Sk1f
А причем здесь WMI? Это стандартный скрипт, с применением AD.

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

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



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
FreemanRU я лоханулся . Сейчас исправил.  
 
 
Добавлено:
этот способ хорош, но дело в том у меня скрипт - который состоит из нескольких ф-ций.
Образно говоря задача такая:
Сначала мне нужно считать OU.  
В считарнных OU  считать Group(Глобальные).  
В этих Group считать пользователей.  
 
Но до шага считывания групп я делал без ADSI и теперь бы не хотел применять эту технологию.  
 
Добавлено:
Можно было бы сделать через рекурсию, но я пока не представляю как она будет работать для такой ситуации - когда на основе считанных данных берутся данные другие и тд.

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



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Urel а ты сам откуда?
Просто я в Москве обитаю, но насчет Крушовицы я не врал. Просто такую помощь я не привык не оценивать!  (p.s. если зарплату выплатят сегодня только )
 
 
 
 
 

Всего записей: 198 | Зарегистр. 04-04-2006 | Отправлено: 10:40 21-04-2006
urel

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

Цитата:
Const ADS_GROUP_TYPE_GLOBAL_GROUP = &h2
Const ADS_GROUP_TYPE_LOCAL_GROUP = &h4
Const ADS_GROUP_TYPE_UNIVERSAL_GROUP = &h8
Const ADS_GROUP_TYPE_SECURITY_ENABLED = &h80000000
 
Set RootDSE = GetObject("LDAP://RootDSE")  
strResourceOUDN = "OU=Test," & RootDSE.Get("DefaultNamingContext")
 
recorseOU(strResourceOUDN)
 
sub recorseOU(ParentOUdn)
    Set objOU = GetObject("LDAP://" & ParentOUdn)    
    objOU.Filter = Array("organizationalUnit")
     
    WScript.Echo "List Organizational Unit: " & objOU.distinguishedName
    ListGlobalGroupsMembers(objOU.distinguishedName)
     
    For Each Container In objOU
        recorseOU(Container.distinguishedName)
    Next    
End Sub
 
Sub ListGlobalGroupsMembers(OUdn)
    Set objOU = GetObject("LDAP://" & OUdn)
    objOU.Filter = Array("group")  
    For Each objGroup In objOU
        intGroupType=objGroup.get("GroupType")
        If intGroupType AND ADS_GROUP_TYPE_GLOBAL_GROUP Then
            objGroup.GetInfo
            arrMemberOf = objGroup.GetEx("member")
            WScript.Echo vbTab & objGroup.distinguishedName & " :"
            For Each strMember in arrMemberOf
                WScript.echo vbTab & vbTab & strMember
            Next  
        End If
    Next
End Sub

 
а обитать пока приходитья в минск, рб. так что с крушовицей пока не судьба, хотя к зиме может и переберусь, если москва понравиться =)
 

Всего записей: 292 | Зарегистр. 16-09-2004 | Отправлено: 12:27 21-04-2006 | Исправлено: urel, 12:28 21-04-2006
Sk1f



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

Цитата:
 
' 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 RootDSE = GetObject("LDAP://RootDSE")
  Set DefaultDomain = GetObject("LDAP://" & RootDSE.Get("DefaultNamingContext"))
 WScript.Echo DefaultDomain.distinguishedName
WScript.Echo VbCrLf
On Error Resume Next  
 
strResourceOUDN = "OU=Test," & RootDSE.Get("DefaultNamingContext")
Set objOU = GetObject("LDAP://" & strResourceOUDN)
objOU.Filter = Array("organizationalUnit")
 
' Считывание OU
   For Each oOU In objOU
    strResource = oOU.distinguishedName
         
' Считывание Group
   Set objListGroup = GetObject("LDAP://" & strResource)
    ObjListGroup.Filter = Array("Group")
    For Each objGroup In objListGroup
    intGroupType = objGroup.get("GroupType")
     If intGroupType And ADS_GROUP_TYPE_GLOBAL_GROUP Then
     
    strResourceGr = objGroup.distinguishedName
 
 ' WScript.Echo strResourceGr         - для проверки себя  
     
' Считывание пользователей
 
   Set objGrp = GetObject("LDAP://" & strResourceGr)
      objGrp.GetInfo
     arrMemberOf = objGrp.GetEx("member")
       
    For Each strMember In arrMemberOf
   Set objUsr = GetObject("LDAP://" & strMember)      
     UserPath = strMember
     
     WScript.Echo UserPath
       
   Next  
  End If
 Next  
Next
 
 
     
 
Как говорится тупо в лоб  
   
 
 
 
 
Добавлено:
Но зашел шеф и усложнил задачу.  
У меня в глобальных группах присутствуют не только пользователи, но в некоторых группах вложены и другие глобальные группы.
А задачу он поставил, чтобы информацию, которую бы извлекал скрипт касалась бы только пользователей, т.е. при считывании глобальной группы выводилися бы только списо пользователей.
 
p.s. спасибо за скрипт, сейчас сижу его смотрю. Красивее смотрится и более грамотно (ПОПРАВИЛ! )
 
Добавлено:
Минск мы летом с друзьями собираемся поехать

Всего записей: 198 | Зарегистр. 04-04-2006 | Отправлено: 13:26 21-04-2006 | Исправлено: Sk1f, 14:04 21-04-2006
urel

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
только без рекурсии, и группы выбираются только из оу стоящих на уровень ниже "OU=Test," & RootDSE.Get("DefaultNamingContext")
 
Добавлено:
можно добавить проверку кто таки strMember  
 
Добавлено:

Цитата:
[...]
For Each strMember in arrMemberOf
If IsUser(strMember) Then WScript.echo vbTab & vbTab & strMember
Next  
[...]
Function IsUser(objDN)
    IsUser=False
    On Error Resume Next
    Set obj = GetObject("LDAP://" & objDN)
    For Each attrib In obj.objectClass
        If attrib = "user" Then IsUser=true
    Next
    On Error Goto 0
End Function  


Всего записей: 292 | Зарегистр. 16-09-2004 | Отправлено: 13:40 21-04-2006 | Исправлено: urel, 13:52 21-04-2006
freeek

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Господа. Помогите плиз. Можно ли с помощью скрипта WSH обновить удаленную тачку в домене например с XP SP1 до SP2? Есть скрипт который используя WMI проверяет ПК в сети и если ПК с ОС XP SP1 скрипт должен обновить ось. Как это зделать незнаю

Всего записей: 57 | Зарегистр. 04-04-2006 | Отправлено: 14:03 23-04-2006
Uriu

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
freeek
Вот Вам скрипт для проверки что стоит для одного комп. Как на всех запустить найдете в этой ветке.
 
Подробнее...
 

Всего записей: 340 | Зарегистр. 25-11-2004 | Отправлено: 08:29 24-04-2006
urel

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

Всего записей: 292 | Зарегистр. 16-09-2004 | Отправлено: 10:28 24-04-2006
freeek

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
да не хотел я WSUS использовать.  
Ну а скрипт похож чемто на тот что я использую.

Всего записей: 57 | Зарегистр. 04-04-2006 | Отправлено: 17:20 24-04-2006
Sk1f



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Блин такая штука (немного не в теме правда), но интересно просто - мое терпение уже на пределе - я заеб... по полной возиться с утилитой ldifde.  
Запускаю ее на сервере - выкачиваю инфу по AD. И теперь на виртуальной машине, где поднят AD с точно таким же именем и прочей фигней (кроме паролей что) пытаюсь импортировать из ldif файла в AD. Тогда система показывает большой средний палец и посылает с ошибкой:
 
"The modification was not permitted  for security reasons"
 
а дальше типа 0 записей записано успешно и бла бла  
 
Вопрос знактокам - что за хрень?  
 
p.s. Я никак не изменяю этот файл, я просто считал, перенес в виртуалку и пытаюсь импортировать
 
Добавлено:
для чего это нужно - да чтобы запустить скрипт не на живом сервере

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



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Sk1f
Ну тебе же записали -
Цитата:
not permitted  for security reasons

т.е. запрещено изменение по причинам безопасности. Т.е. что-то ты слишком крутое пытаешься изменить.
 
А вообще то, что ты делаешь, лучше сделать через бакап-восстановление, н-р с помощью ntbackup

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

Всего записей: 3795 | Зарегистр. 16-07-2004 | Отправлено: 15:52 25-04-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