Microsoft Outlook troubleshooting
Eksport do pliku CSV kontaktów z Active Directory o określonym numerze telefonu

Eksport do pliku CSV kontaktów z Active Directory o określonym numerze telefonu

autor CodeTwo 2008-01-18 00:00:00 w Exchange Server

Skrypt pokazuje, w jaki sposób przeszukać Active Directory i wyeksportować do pliku CSV użytkowników posiadających określone wartości atrybutów, na przykład numer telefonu.

Poniższy skrypt wyszuka w Active Directory i wyeksportuje do pliku "C:\output.csv" wszystkie kontakty i użytkowników, którzy w numerze telefonu mają wartość "12345". Skrypt można w prosty sposób zmodyfikować, aby wyszukiwał na podstawie innych pól. W tym celu w linii oznaczonej (*4) należy zmodyfikować zapytanie LDAP podając odpowiednią nazwę atrybutu z Active Directory.

Jak uruchomić skrypt we własnym środowisku?

Poniższy skrypt należy zapisać w pliku o dowolnej nazwie z rozszerzeniem .VBS. Nie musi on być zapisany bezpośrednio na komputerze z serwerem Exchange, wystarczy jeśli będzie to stacja kliencka należąca do Active Directory. Po uruchomieniu pliku ze skryptem wygenerowany zostanie na dysku C: plik wynikowy o nazwie output.csv (wartości pól będą rozdzielone znakiem | strumienia, jeśli wartość pola składa się z kilku innych wartości, np. kilka aliasów, będą one rozdzielone znakiem #). Dla każdego kontaktu lub użytkownika skrypt eksportuje do pliku wynikowego pola Active Directory: givenName, sn, mail- czyli odpowiednio: imię, nazwisko, główny adres SMTP.

W linii oznaczonej (*0) należy wpisać cały lub część numeru poszukiwanego telefonu. W linii (*1) nazwę domeny, z której mają zostać wyeksportowane skrzynki (przykład jest dla domeny codetwo.com). Jeśli chcemy wyeksportować inne albo dodatkowe pola Active Directory, należy wypisać je odpowiednio rozdzielając przecinkami w linii oznaczonej (*2). Jeśli chcemy wyeksportować dane do pliku innego niż c:\output.csv, jego ścieżkę należy podać w linii oznaczonej (*3). Aby wyszukiwać po innych polach niż numer telefonu, należy zmodyfikować zapytanie LDAP (linia (*4)) podając odpowiednią nazwę atrybutu z Active Directory.

' Phone Number
strPhone = "12345" '(*0)

' Domain
strDomain = "DC=codetwo,DC=com"  '(*1)

' LDAP fields
strLdapFields = "givenName,sn,mail"  '(*2)

' Output path
strOutputPath = "C:\output.csv"  '(*3)

' LDAP query string
strLdapQuery = "(&(objectClass=User)(telephoneNumber=*" & strPhone & "*))"  ' (*4)


Set con = WScript.CreateObject("ADODB.Connection")
Set rs = WScript.CreateObject("ADODB.Recordset")
Set Com = WScript.CreateObject("ADODB.Command")

Set fso = WScript.CreateObject("Scripting.FileSystemObject")
Set file = fso.CreateTextFile(strOutputPath, True)
    
' Open a Connection object.
con.Provider = "ADsDSOObject"
con.Properties("ADSI Flag") = 1
'con.Properties("User ID") = strDomain + "\" + strUserID
'con.Properties("Password") = strPassword
con.Open "Active Directory Provider"
    
' Create a command object on this connection.
Set Com.ActiveConnection = con

' Set the query string.
Com.CommandText = "<LDAP://" & strDomain & ">;" & strLdapQuery & ";" & strLdapFields & ";SubTree"
    
' Execute the query.
Set rs = Com.Execute

file.WriteLine Replace( strLdapFields, ",", "|" )

If Not rs.EOF Then
    ' Navigate the record set.
    rs.MoveFirst
    While Not rs.EOF
        strLine = ""

        For i = 0 To rs.Fields.Count - 1
            If rs.Fields(i).Type = 12 And Not (IsNull(rs.Fields(i).Value)) Then
                strValue = ""
                For j = LBound(rs.Fields(i).Value) To UBound(rs.Fields(i).Value)
                    vValue = rs.Fields(i).Value
                    If j <> LBound(rs.Fields(i).Value) Then strValue = strValue & "#"
                    strValue = strValue & vValue(j)
                Next
            Else
                strValue = rs.Fields(i).Value
            End If

            If i <> 0 Then strLine = strLine & "|"
            If Not IsNull(strValue) Then strLine = strLine & strValue
        Next
        
        file.WriteLine strLine
        rs.MoveNext
    Wend
    
    rs.MoveLast
End If

Jeśli masz jakieś pytania lub komentarze dotyczące tego artykułu, napisz na naszym forum.

(c) CodeTwo. Wszelkie prawa zastrzeżone.



© Wszelkie prawa zastrzeżone. Żadna część ani całość tego artykułu nie może być powielana ani publikowana bez zgody autora.