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

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

Автор: urel
Дата сообщения: 19.04.2006 15:09
ты можешь проверять проверять по groupType
не ленись, читай доки - они рулез!!!
хотя в примере
List the General Properties of a Group
не хватает intGroupType=objGroup.get("GroupType")



Добавлено:
я как т о на шл для себя, VbsEdit его только и юзаю, найти можно в варезнике
Автор: Sk1f
Дата сообщения: 19.04.2006 15:21
Что нахожу все читаю, но я пока newbie и ошибаюсь.

А так могу сказать, что urel большую кружку темной Крушовицы я бы поставил!!!!

Автор: urel
Дата сообщения: 19.04.2006 16:01
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


надеюсь это поможет
Автор: Sk1f
Дата сообщения: 19.04.2006 16:24
Угу как раз в нем и сижу весь день.

Автор: Sk1f
Дата сообщения: 20.04.2006 10:18
Доброе утро.
И уже назрел вопрос по поводу фильтра.....так сказать пошла вторая кружка


Цитата:

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")





Автор: urel
Дата сообщения: 20.04.2006 13:13
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
Автор: Sk1f
Дата сообщения: 20.04.2006 13:31
угу это я видел, но не хотел пока лезть в ADSI.
Поэтому хотел обойти этот метод стороной и попытаться сделать по другому
Автор: FreemanRU
Дата сообщения: 20.04.2006 13:52
Sk1f
А причем здесь WMI? Это стандартный скрипт, с применением AD.
Автор: Sk1f
Дата сообщения: 20.04.2006 14:12
FreemanRU я лоханулся . Сейчас исправил.


Добавлено:
этот способ хорош, но дело в том у меня скрипт - который состоит из нескольких ф-ций.
Образно говоря задача такая:
Сначала мне нужно считать OU.
В считарнных OU считать Group(Глобальные).
В этих Group считать пользователей.

Но до шага считывания групп я делал без ADSI и теперь бы не хотел применять эту технологию.

Добавлено:
Можно было бы сделать через рекурсию, но я пока не представляю как она будет работать для такой ситуации - когда на основе считанных данных берутся данные другие и тд.
Автор: Sk1f
Дата сообщения: 21.04.2006 09:40
Urel а ты сам откуда?
Просто я в Москве обитаю, но насчет Крушовицы я не врал. Просто такую помощь я не привык не оценивать! (p.s. если зарплату выплатят сегодня только )





Автор: urel
Дата сообщения: 21.04.2006 11:27
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


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

Автор: Sk1f
Дата сообщения: 21.04.2006 12:26
А вот как я сделал:

Цитата:

' 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. спасибо за скрипт, сейчас сижу его смотрю. Красивее смотрится и более грамотно (ПОПРАВИЛ! )

Добавлено:
Минск мы летом с друзьями собираемся поехать
Автор: urel
Дата сообщения: 21.04.2006 12:40
только без рекурсии, и группы выбираются только из оу стоящих на уровень ниже "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

Автор: freeek
Дата сообщения: 23.04.2006 13:03
Господа. Помогите плиз. Можно ли с помощью скрипта WSH обновить удаленную тачку в домене например с XP SP1 до SP2? Есть скрипт который используя WMI проверяет ПК в сети и если ПК с ОС XP SP1 скрипт должен обновить ось. Как это зделать незнаю
Автор: Uriu
Дата сообщения: 24.04.2006 07:29
freeek
Вот Вам скрипт для проверки что стоит для одного комп. Как на всех запустить найдете в этой ветке.

[more]
'*******************************************************************
' Имя: ServPack.vbs
' Язык: VBScript
' Описание: Вывод номера ServicePack для операционной системы
'*******************************************************************
Option Explicit

' Объявляем переменные
Dim strComputer ' Имя компьютера
Dim strNamespace ' Имя пространства имен
Dim strClass ' Имя класса
Dim objClass ' Объект SWbemObject (класс WMI)
Dim colOperatingSystems ' Коллекция экземпляров класса WMI
Dim objOperatingSystem ' Элемент коллекции
Dim strResult ' Строка для вывода на экран

'********************** Начало *************************************
' Присваиваем начальные значения переменным
strComputer = "."
strNamespace = "Root\CIMV2"
strClass = "Win32_OperatingSystem"
strResult = "ServicePack установленный на этом компьютере " & VbCrLf

' Получаем указатель на класс WMI
Set objClass = GetObject("WinMgmts:\\" & strComputer & _
"\" & strNamespace & ":" & strClass)
' Создаем коллекцию экземпляров класса Win32_OperatingSystem
Set colOperatingSystems = objClass.Instances_

' Перебираем элементы коллекции
For Each objOperatingSystem in colOperatingSystems
' Формируем строку для вывода на экран
strResult = strResult & "№ " & _
objOperatingSystem.ServicePackMajorVersion & "." &_
objOperatingSystem.ServicePackMinorVersion & VbCrLf
Next

' Выводим результирущую строку на экран
Wscript.Echo strResult
'************************* Конец *********************************** [/more]

Автор: urel
Дата сообщения: 24.04.2006 09:28
freeek
WSUS тебе в помощь!
Автор: freeek
Дата сообщения: 24.04.2006 16:20
да не хотел я WSUS использовать.
Ну а скрипт похож чемто на тот что я использую.
Автор: Sk1f
Дата сообщения: 25.04.2006 14:25
Блин такая штука (немного не в теме правда), но интересно просто - мое терпение уже на пределе - я заеб... по полной возиться с утилитой ldifde.
Запускаю ее на сервере - выкачиваю инфу по AD. И теперь на виртуальной машине, где поднят AD с точно таким же именем и прочей фигней (кроме паролей что) пытаюсь импортировать из ldif файла в AD. Тогда система показывает большой средний палец и посылает с ошибкой:

"The modification was not permitted for security reasons"

а дальше типа 0 записей записано успешно и бла бла

Вопрос знактокам - что за хрень?

p.s. Я никак не изменяю этот файл, я просто считал, перенес в виртуалку и пытаюсь импортировать

Добавлено:
для чего это нужно - да чтобы запустить скрипт не на живом сервере
Автор: FreemanRU
Дата сообщения: 25.04.2006 14:52
Sk1f
Ну тебе же записали -
Цитата:
not permitted for security reasons

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

А вообще то, что ты делаешь, лучше сделать через бакап-восстановление, н-р с помощью ntbackup
Автор: Sk1f
Дата сообщения: 25.04.2006 15:00
FreemanRU да, но я просто создаю в AD ou, group и юзверей. Поэтому какие изменения кардинальные!!!
Автор: eldo
Дата сообщения: 25.04.2006 19:01
Скажите, а ни у кого нету скрипта закрытия портов TCP/IP и портов NetBIOS? И возможно ли вообще такое? Заранее благодарю.
Автор: FreemanRU
Дата сообщения: 25.04.2006 19:04
Sk1f

Цитата:
AD ou, group и юзверей

А не захваил ли ты часом встроенные (build-in) группы и учетки (н-р Domain Admins и пр.)

Добавлено:
eldo
Задача не ясна. Какого скрипта? Закрывать порты - это задача для фаервола.

Опиши подробнее что тебе надо.. укажи ОС, какое ПО у тебя, и для чего тебе это всё надо.
Автор: eldo
Дата сообщения: 25.04.2006 19:17

Цитата:
Опиши подробнее что тебе надо.. укажи ОС, какое ПО у тебя, и для чего тебе это всё надо.

Насколько я слышал в Windows 2000 имеется встроенный фильтр пакетов. То есть, я понимаю можно средствами одного Windows организовать фаервол (ну то есть закрыть какие-то порты)
Или может можно управлять параметрами фаервола Windows XP используя WHS или что-то подобное.
+ еще задача фильтрации NetBIOS траффика.

а надо это все чтоб сдать предмет в университете (ну и для себя конечно пригодится)

Спасибо
Автор: FreemanRU
Дата сообщения: 25.04.2006 19:35
eldo
Ну, начнем с того, что в Windows 2000 и XP фаервол устроен по разному. В 2000 это жалкое подобие сиго чуда, а в ХР это уже полноценный (ну ладно, для придерающихся - почти полноценный) фаер. Собсвтенно и рулением ими производится совсем по разному. Даже XP без SP2 и XP с SP2 отичаются в этом плане.


Для 2000 и ХР можно воспльзовать 2мя варинтами. Первый, это IPSec:
http://www.microsoft.com/technet/scriptcenter/scripts/network/client/modify/nwmovb08.mspx

Код:
On Error Resume Next

Const ALLOW_ALL = 0

strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colNetCards = objWMIService.ExecQuery _
("Select * From Win32_NetworkAdapterConfiguration Where IPEnabled = True")
For Each objNetCard in colNetCards
arrPermittedTCPPorts = Array(ALLOW_ALL)
arrPermittedUDPPorts = Array(ALLOW_ALL)
arrPermittedIPProtocols = Array(ALLOW_ALL)
objNetCard.EnableIPSec arrPermittedTCPPorts, arrPermittedUDPPorts, arrPermittedIPProtocols
Next
Автор: eldo
Дата сообщения: 25.04.2006 23:52

Огромное спасибо, FreemanRU!
Я вот еще хотел уточнить (прошу прощения за безграмотность):
1) в данном примере отключается NetBIOS через TCP, как я понимаю. А если просто закрыть порты (137-139) это будет равноценным?
2) если NetBIOS используется сам по себе и как транспортный протокол (без TCP/IP), то у него есть какие-то свои порты? Если да, то их можно конфигурировать?

Еще раз спасибо
Автор: FreemanRU
Дата сообщения: 26.04.2006 11:30
eldo
1. В данном примере отключается NETBios весь как таковой. Это равносильно настройкам в Свойства соедиенения->Свойства TCP|IP->Дополнительно...->Вкладка WINS->Поле Настройки NETBios. Что касается закрытия портов, то нет, это не равноценно, т.к. в этом слкчае система будет пытаться продолжится через NETBios и получать отбой только через большой промежуток времени. Соотвественно тормоза.
2. Это как? NETBios работает только по верх TCP|IP. Конфигурировать порты стандартных служб локально нельзя.
Автор: urel
Дата сообщения: 26.04.2006 11:56
eldo
если заблокировать

Цитата:
NetBIOS has three protocols.
137/tcp,udp netbios-ns NetBIOS name service
138/udp netbios-dgm NetBIOS datagram service
139/tcp netbios-ssn NetBIOS session service

, снаружи будет выглядеть также как если его нет - те отключен

NetBIOS использует для транспорта себя IPX/SPX или TCP/IP, отдельно не живет выше сказаное справедливо для реализации на TCP/IP

Добавлено:
2 FreemanRU
а какие получатсья тормоза если комп подключающийся на 139 tcp получит отлуп? если конечно не кушать молча пакеты =)
Автор: FreemanRU
Дата сообщения: 26.04.2006 12:11
urel
Я имел ввиду работу локального компа, когда блокируется и исходящий трафик.
Автор: urel
Дата сообщения: 26.04.2006 12:26
FreemanRU
попахивает мазохизмом =)

а если по делу то тут наверно всеже нужно отключать протокол "File and Printer sharing for Microsoft Networks" или анинсталить

а TCP|IP->Дополнительно...->Вкладка WINS->Поле Настройки NETBios лишь указывает на то как реагировать на широковещательные запросы поиска имени, при этом оставаясь достумным по ip / fqdn
Автор: Sk1f
Дата сообщения: 26.04.2006 14:47
Люди интересует следующее свойство группы или как его можно извлечь:
Я считываю group из ou, мне нужно извлечь адрес(т.е. distinguished name) но не group, а ou в которой расположена группа.

т.е. group: "cn=test,ou=test,dc=test,dc=ru"

Мне нужно извлечь: "ou=test,dc=test,dc=ru"


Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

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


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