|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
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 предусмотрены следующие свойства и методы:
Dim propList Set propList = GetObject( _ "LDAP://CN=Alexander Ivanov,OU=HQ,DC=nwtraders1,DC=msft") propList.GetInfo Wscript.Echo propList.PropertyCount
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
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
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
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
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
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
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
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
Получить учебные материалы по этому курсу
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||