Академия Специальных Курсов по Компьютерным Технологиям
    Главная страница Послать письмо
 
AskIt.ru  
   
   
   
   
   
   
 
 
  Главная / Заказные курсы / Программирование для администраторов
 
 

Получить учебные материалы по этому курсу


<-- Назад Читать дальше -->

15.13 ADSI. Интерфейс IADsPropertyList

Интерфейс IADSPropertyList в скриптах ADSI на VBScript, получение информации о свойствах объектов Active Directory, свойство PropertyCount, методы GetPropertyItem(), Item(), Next(), PurgePropertyList(), PutPropertyItem(), Reset(), ResetPropertyItem(), Skip()

Этот базовый интерфейс предназначен для работы со свойствами объектов Active Directory. В принципе, работать со свойствами можно и без него (например, при помощи метода Put()), однако в некоторых ситуациях применение этого интерфейса может быть очень удобным. Например, средствами IADsPropertyList можно получить информацию о всех свойствах конкретного объекта, их типе и т.п.

Необходимо сразу отметить, что использовать свойства и методы этого интерфейса можно только после того, как для соответствующего объекта Active Directory будет вызван метод IADs.GetInfo() (или GetInfoEx(), или Get(), или GetEx(), в зависимости от ситуации — см. раздел. Без этого кэш свойств и, соответственно, их набор, доступный через интерфейс IADsPropertyList будет пустым.

Например, для объекта пользователя Александра Иванова в организационном подразделении HQ в домене nwtraders1.msft получение информации о имени и  типе всех свойств может выглядеть так:

Dim propList

Dim v, propEntry

On Error Resume Next

Set propList = GetObject("LDAP://CN=Alexander Ivanov,OU=HQ,DC=nwtraders1,DC=msft")

propList.GetInfo

Set v = propList.Next()

Do While (IsNull(v) = False And Err.Number = 0)

    Set propEntry = v

    Wscript.Echo v.Name & vbTab & v.ADsType

    Set v = propList.Next

Loop

Получение значений всех свойств выглядит немного сложнее и производится средствами интерфейсов IADsPropertyValue и IADsPropertyValue2.

Для интерфейса IADsPropertyList предусмотрены следующие свойства и методы:

  • PropertyCount — единственное свойство интерфейса IADsPropertyList возвращает информацию о количестве свойств, предусмотренных для данного объекта. Например, для объекта пользователя его применение может выглядеть следующим образом:

Dim propList

Set propList = GetObject( _

"LDAP://CN=Alexander Ivanov,OU=HQ,DC=nwtraders1,DC=msft")

propList.GetInfo

Wscript.Echo propList.PropertyCount

  • GetPropertyItem() — этот метод позволяет вернуть свойство объекта Active Directory по его имени. В качестве параметров этот метод принимает имя свойства и его тип в виде значения перечисления ADSTYPEENUM (в нем предусмотрено 28 значений). Если тип свойства вам не известен, чтобы не рисковать, можно передать специальное значение ADSTYPE_UNKNOWN (26). Этот метод возвращает информацию в виде ссылки на объект IADsPropertyEntry, который можно использовать для получения информации о значении свойства. Пример применения метода GetPropertyItem() может выглядеть так:

Const ADSTYPE_CASE_IGNORE_STRING = 3

Dim propList

Dim propEntry

Dim propVal

Set propList = GetObject("LDAP://dc01/DC=Fabrikam,DC=com")

propList.GetInfo

Set propEntry = propList.GetPropertyItem("dc", ADSTYPE_CASE_IGNORE_STRING)

For Each v In propEntry.Values

    Set propVal = v

    ' Use the CaseIgnoreString property because the ADSTYPE_CASE_IGNORE_STRING

    ' type was requested in GetPropertyItem.

    Wscript.Echo propVal.CaseIgnoreString

Next

Set propList = Nothing

Set propEntry = Nothing

Set propVal = Nothing

  • Item() — этот метод отличается от метода GetPropertyItem() тем, что позволяет получить свойство (то есть объект IADsPropertyEntry) по имени или номеру. Тип свойства передавать при этом не надо. Пример применения этого метода может выглядеть так:

Dim propList

Dim propEntry

Dim count

On Error GoTo Cleanup

Set propList = GetObject("LDAP://dc02/DC=Fabrikam,DC=com")

propList.GetInfo

count = propList.PropertyCount

Wscript.Echo "No of Property Found: " & count

'==== Getting the property list item with Name ==================

Set propEntry = propList.Item("uSNCreated")

Wscript.Echo propEntry.Name

Wscript.Echo propEntry.ADsType

' to examine property entries by name and type

For i = 0 To count - 1

    '==== Getting the property list item with Number =============

    Set propEntry = propList.Item(i)

    Wscript.Echo propEntry.Name

    Wscript.Echo propEntry.ADsType

Next

Cleanup:

    If (Err.Number<>0) Then

        MsgBox("An error has occurred. " & Err.Number)

    End If

    Set propList = Nothing

    Set propEntry = Nothing

  • Next() — этот метод позволяет вернут следующее свойство в виде объекта PropertyEntry. Обычно он используется для перебора всех свойств какого-либо объекта Active Directory.
  • PurgePropertyList() — этот метод можно считать обратным методу IADs.GetInfo(). Если метод IADs.GetInfo() загружает все свойства в кэш свойств, то PurgePropertyList() очищает кэш свойств, удаляя из него информацию для всех свойств данного объекта. При этом сам объект Active Directory никак не затрагивается — этот метод работает только с представлением данного объекта в оперативной памяти. Обычно он используется, чтобы высвободить оперативную память на компьютере, на котором производятся операции с объектами Active Directory средствами ADSI. Пример применения этого метода может выглядеть следующим образом:

Dim propList

On Error GoTo Cleanup

Set propList = GetObject("LDAP://dc03/DC=Fabrikam,DC=com")

propList.GetInfo

propList.PurgePropertyList

'- None of GetPropertyItem should work, because the list is purged.

'- The following line should generate error.

Set propEntry = propList.GetPropertyItem("adminDescription", ADSTYPE_CASE_IGNORE_STRING)

Cleanup:

    If (Err.Number<>0) Then

        MsgBox("An error has occurred. " & Err.Number)

    End If

    Set propList = Nothing

  • PutPropertyItem() — этот метод позволяет присвоить новое значение свойству объекта ActiveDirectory. По своим возможностям этот метод очень похож на метод Put() интерфейса IADs. Точно так же этот метод работает с кэшем для объекта Active Directory, а после его вызова необходимо вызвать метод IADs.SetInfo(). В качестве параметра метод PutPropertyInfo() принимает объект PropertyEntry, в котором должно быт настроено новое значение для свойства. Пример применения этого метода может выглядеть так:

Dim propList

Dim propVal

Dim propEntry

Set propList = GetObject("LDAP://DC=Fabrikam,DC=com")

Set propVal = New PropertyValue

'--- Property Value-----

propVal.CaseIgnoreString = "Fabrikam, Inc - Seattle, WA"

propVal.ADsType = ADSTYPE_CASE_IGNORE_STRING

'--- Property Entry ----

Set propEntry = New PropertyEntry

propEntry.Name = "adminDescription"

propEntry.Values = Array(propVal)

propEntry.ControlCode = ADS_PROPERTY_UPDATE

propEntry.ADsType = ADSTYPE_CASE_IGNORE_STRING

' --- Property List----

propList.PutPropertyItem (propEntry)

' query the IADs interface on the propList object

Dim IADsObj

Set IADsObj=propList

' Commit changes of the property list to the directory store.

IADsObj.SetInfo

  • Reset() — этот метод позволяет вернутся на начало списка свойств. Обычно он используется после вызова метода Next(), чтобы вернуться к исходному состоянию. Пример его применения может выглядеть так:

Dim propList

On Error Resume Next

Set propList = GetObject("LDAP://DC=Fabrikam,DC=com")

propList.GetInfo

Set v = propList.Next()

Do While (Not (IsNull(v)) And Err.Number = 0)

    Set propEnty = v

    If v.Name = "uSNCreated" Then 'Item() method could be used instead.

       Wscript.Echo v.Name

       Wscript.Echo v.ADsType

       Exit Do

    End If

    Set v = propList.Next

Loop

propList.Reset

  • ResetPropertyItem() — этот метод позволяет удалить указанное вами свойство из списка (то есть кэша свойств). Этому методу можно передать как имя свойства, так и его номер. Этот метод используется только для экономии оперативной памяти. На сам объект Active Directory он никак не влияет. Пример его применения может выглядеть следующим образом:

Dim propList

On Error GoTo Cleanup

Set propList = GetObject("LDAP://DC=Fabrikam,DC=com")

'--- Now modify the cache using PutPropertyItem

Set propVal = New PropertyValue

'--- Property Value-----

propVal.CaseIgnoreString = "Fabrikam"

propVal.ADsType = ADSTYPE_CASE_IGNORE_STRING

'--- Property Entry ----

Set propEntry = New PropertyEntry

propEntry.Name = "adminDescription"

propEntry.Values = Array(propVal)

propEntry.ControlCode = ADS_PROPERTY_UPDATE

propEntry.ADsType = ADS_CASE_IGNORE_STRING

' --- Property List----

propList.PutPropertyItem (propEntry)

' Commit to the directory. Without this, the changes take place only in the cache.

propList.SetInfo

propList.GetInfo

Wscript.Echo " Number of Properties = " & propList.PropertyCount

propList.ResetPropertyItem "adminDescription"

' the property count should have been reduced by one.

Wscript.Echo "Number of properties = " & propList.PropertyCount

Cleanup:

    If (Err.Number<>0) Then

        MsgBox("An error has occurred. " & Err.Number)

    End If

    Set propList = Nothing

    Set propVal = Nothing

    Set propEntry = Nothing

  • Skip() — этот метод позволяет переместить курсор для списка свойств на указанное количество позиций. В качестве параметра этот метод принимает количество позиций, на которое следует переместиться. Обычно этот метод используется вместо метода Next() или вместе с этим методом для сокращения количества выполняемых операций. Пример его применения может выглядеть так:

Dim propList

On Error Resume Next

Set propList = GetObject("LDAP://DC=Fabrikam,DC=com")

propList.GetInfo

Set v = propList.Next()

While (Not (IsNull(v)) And Err.Number = 0)

    Set propEnty = v

    If (v.Name  = "uSNCreated") Then 'Item() method could be used instead.

        Wscript.Echo v.Name

        Wscript.Echo v.ADsType

        Exit Sub

    End If

    propList.Skip (1) 'Skip every other property

    Set v = propList.Next

Wend

 

   
   
   
   
   
   
   
   
   
   
 
<-- Назад Читать дальше -->

Получить учебные материалы по этому курсу


 

 
© 2004-2008, Академия Специальных Курсов
по Информационным Технологиям
.
Все права защищены.

Разработка NevaStudio
г. Санкт-Петербург, Васильевский остров,
20-я линия, д. 7
Офис 101, 2-й этаж
Телефон: 8(812)922-47-60
E-mail: info@askit.ru