
Eksport wszystkich skrzynek serwera Exchange do pliku CSV
Artykuł dotyczy: Exchange Server 2000/2003 |
Często pojawiającym się pytaniem jest możliwość wyeksportowania, np. do pliku CSV, wszystkich skrzynek pocztowych serwera Exchange. Jeszcze częściej pada pytanie o wyeksportowanie wszystkich skrzynek, ale z jakąś dodatkową informacją, przykładowo z wszystkimi adresami (aliasami lub inaczej adresami proxy) przypisanymi do skrzynki.
Exchange to jeden z mocniej zaawansowanych serwerów do pracy grupowej dostępnych na rynku, jednak nie zawiera wbudowanych funkcji raportowania. Do tego celu możemy używać darmowych programów, jak LDIFDE lub rozwiązań firm trzecich, niestety zazwyczaj słono płatnych. Szczęśliwie jest też trzecie rozwiązanie - napisanie lub wykorzystanie gotowego skryptu, bo Exchange daje akurat duże możliwości w dziedzinie jego rozszerzania, czy oprogramowywania. Zaletą skryptu jest niewątpliwie to, że możemy go modyfikować i przystosowywać do własnych indywidualnych potrzeb. Wadą - to że administratorowi może być trudno taki skrypt napisać od podstaw, bo w końcu nie jest programistą, a jest to zadanie typowo programistyczne. Dużo łatwiej jest, gdy mamy skrypt gotowy do użycia, w którym musimy wprowadzić minimalne zmiany lub żadnych. Poniżej przedstawiam taki właśnie skrypt.
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 #). Wystarczy zaimportować go do Excel'a, aby w wygodny sposób przeglądnąć wszystkie skrzynki Exchange z naszej domeny. Dla każdej skrzynki skrypt eksportuje do pliku wynikowego pola Active Directory: givenName, sn, mail, proxyAddresses - czyli odpowiednio: imię, nazwisko, główny adres SMTP, aliasy.
W linii oznaczonej (*1) należy wpisać 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).
' Domain strDomain = "DC=codetwo,DC=com" '(*1) ' LDAP fields strLdapFields = "givenName,sn,mail,proxyAddresses" '(*2) ' Output path strOutputPath = "C:\output.csv" '(*3) ' LDAP query string strLdapQuery = "(&(objectClass=User)(|(homeMDB=*)(msExchHomeServerName=*)))" 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, ",", "|" ) ' 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
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.