Excel VBA:如何从AD组中查找描述

py49o6xq  于 2023-02-17  发布在  其他
关注(0)|答案(1)|浏览(163)

我已经浏览了这个网站很多次的答案,这是我的第一个问题。伟大的社区在这里!
对于一个项目,我需要做一个Excel工作表,建议新的活动目录组的基础上,其当前的活动目录组。为此,我需要当前活动目录组的描述字段(这是一个必填字段,在我们的组织)。
因此,我已经有一个脚本,可以通过用颜色标记组来验证组的存在。这只是多步问题中的一步。这不会检索描述信息。而且到目前为止,我还没有在互联网上找到一个有效的解决方案。一个可能会使它更复杂的问题是,组位于不同的容器中。这会使可分辨名称前缀不一致。
任何帮助都是受欢迎的杨鲁
到目前为止的代码。这个代码从D列(从D2开始)读取ADgroups,并在Active Directory中搜索它。然后,如果找到一个单元格,它就用绿色标记它。

Sub ValidateGroupName()

Dim objController
Dim objGCController
Dim objConnection
Dim objCommand
Dim strADPath
Dim objRecordSet
Dim objFields

Dim Y As Integer
Dim GroupName As String
Dim ActSheet As String
Dim Descriptionname As String

ActSheet = ActiveSheet.Name

' Set up AD connection

Set objConnection = CreateObject("ADODB.Connection")
    objConnection.Open "Provider=ADsDSOObject;"

Set objCommand = CreateObject("ADODB.Command")
    objCommand.ActiveConnection = objConnection

Set objController = GetObject("GC:")

' Get record from AD

For Each objGCController In objController
    strADPath = objGCController.ADspath
    'strADDescription = objGCController.ADspath
Next

Y = 0
Do

GroupName = Sheets(ActSheet).Range("D2").Offset(Y, 0).Value

    objCommand.CommandText = _
    "<" & strADPath & ">;(&(objectClass=Group)" & _
         "(cn=" & GroupName & "));distinguishedName;subtree"
         

objCommand.Properties("Page Size") = 50000
Set objRecordSet = objCommand.Execute
    
' What to do with results?
If objRecordSet.RecordCount = 0 Then
'change color of a cell to red
Sheets(ActSheet).Range("E2").Offset(Y, 0).Interior.Color = 255
Else
' change color of a cell to green
Sheets(ActSheet).Range("E2").Offset(Y, 0).Interior.Color = 7138816
End If

Y = Y + 1

Loop Until Sheets(ActSheet).Range("D2").Offset(Y, 0).Value = ""

' Close AD connection
    objConnection.Close

End Sub

我希望我的思路是正确的,但换一种方法可能会是一个更干净的解决方案。

cgyqldqp

cgyqldqp1#

首先,将“description”属性添加到查询中:

objCommand.CommandText = _
    "<" & strADPath & ">;(&(objectClass=Group)" & _
         "(cn=" & GroupName & "));distinguishedName;subtree;Description"

第二步,如果存在组,则获取属性值,并将其写在组单元旁边,例如:

If objRecordSet.RecordCount = 0 Then
'change color of a cell to red
Sheets(ActSheet).Range("E2").Offset(Y, 0).Interior.Color = 255
Else
' change color of a cell to green
Sheets(ActSheet).Range("E2").Offset(Y, 0).Interior.Color = 7138816
Sheets(ActSheet).Range("E2").Offset(Y, 1).text = objRecordset.Fields("Description")
End If

相关问题