Конвертировать CSV в LDIF для импорта в ldap?
У меня есть база данных MSSQL с 13 тысячами пользователей в таблице с заголовками, такими как имя пользователя, пароль, имя, имя, имя и т. Д. Я хотел бы иметь возможность превратить эти данные в надлежащий сервер ldap.
В настоящее время я сделал следующее: Создаю на сервере mssql задание для ежечасного экспорта этой таблицы в csv. Запрос запрашивает имя пользователя, пароль, имя, фамилию и идентификатор участника. ftp эти данные ежечасно на мой Linux-сервер LDAP.
Может кто-нибудь порекомендовать метод, как превратить этот CSV в ldif, чтобы я мог запустить ldapmodify и вставить все эти записи в мой сервер ldap? Я предполагаю, что могу написать парсер, но хотел бы знать, есть ли уже продукт, который может выполнять преобразование CSV в LDIF таким образом, и если этот план имеет какой-то смысл или есть лучший способ сделать это? Благодарю.
2 ответа
На тот случай, если кто-то все еще ищет что-то подобное, я создал скрипт autoit для преобразования данного файла CSV в LDIF:
;###########################################################################################
;##### Load requirements
#include <File.au3>
;###########################################################################################
;#### Start the app
LDIF_Converter()
;###########################################################################################
;#### App function
Func LDIF_Converter()
TrayTip("CSV2LDIF Converter","Konvertierung gestartet...",2000,1)
Local $file = "import_ADS.ldif", $contacts = 0, $sFilePath = "3CXImport.csv"
; Remote old file
FileDelete($file);
; Write Header
FileWrite($file,"#Base structure for each person");
Filewrite($file,@crlf)
FileWrite($file,"dn: ou=Telefonbuch,dc=example,dc=com");
Filewrite($file,@crlf)
FileWrite($file,"ou: Telefonbuch");
Filewrite($file,@crlf)
FileWrite($file,"objectClass: organizationalUnit");
Filewrite($file,@crlf)
FileWrite($file,"objectClass: top");
Filewrite($file,@crlf)
Filewrite($file,@crlf)
; Read out CSV File
_FileReadToArray($sFilePath, $contacts, $FRTA_NOCOUNT, ";")
; Write to File for each contact
For $i = 0 To UBound ($contacts) - 1
; Clear contact cache
$cache = ""
; Write object ID & comman attributes
$cache = $cache & "dn: uid="&$i+1&",ou=Telefonbuch,dc=example,dc=com" & @CRLF
$cache = $cache & "objectClass: inetOrgPerson" & @CRLF
$cache = $cache & "objectClass: organizationalPerson" & @CRLF
$cache = $cache & "objectClass: person" & @CRLF
$cache = $cache & "objectClass: top" & @CRLF
; Check if company or person and set the corresponding CN
if $contacts[$i][1] == "" Then
$cn = $contacts[$i][0]
Else
$cn = $contacts[$i][1] & " " & $contacts[$i][2]
EndIf
; Write common name
$cache = $cache & "cn: "&$cn & @CRLF
if $contacts[$i][1] == "" Then
$sn = $contacts[$i][0]
Else
$sn = $contacts[$i][1] & " " & $contacts[$i][2]
EndIf
; Write lastname/company
$cache = $cache & "sn: "&$sn & @CRLF
; Write mobile number
$mobile = StringRegExpReplace($contacts[$i][5],'[a-zA-Z;\\/:.,*?\"<>|& ]',"")
if $mobile <> "" And $mobile <> " " Then
$cache = $cache & "mobile: "& $mobile & @CRLF
EndIf
; Write organisation
if $contacts[$i][0] <> "" Then
$cache = $cache & "o: "&$contacts[$i][0] & @CRLF
EndIf
; Write telephone number
$phone = StringRegExpReplace($contacts[$i][3],'[a-zA-Z;\\/:.,*?\"<>|& ]',"")
if $phone <> "" And $phone <> " " Then
$cache = $cache & "telephoneNumber: "& $phone & @CRLF
EndIf
; Write fax number
$fax = StringRegExpReplace($contacts[$i][4],'[a-zA-Z;\\/:.,*?\"<>|& ]',"")
if $fax <> "" And $fax <> " " Then
$cache = $cache & "facsimileTelephoneNumber: "& $fax & @CRLF
EndIf
; Write email
if $contacts[$i][6] <> "" Then
$cache = $cache & "mail: "&$contacts[$i][6] & @CRLF
EndIf
; Seperator for contacts
$cache = $cache & @CRLF
; Write all in one file access
FileWrite($file,$cache)
Next
TrayTip("CSV2LDIF Converter","Konvertiertierung abgeschlossen ",2000)
sleep(2000)
EndFunc
Простой поиск в Google показал несколько конвертеров CSV в LDIF.
Например, scv2ldif2.pl. Это в Perl, но вы можете найти по крайней мере несколько реализаций Perl для Windows (например, http://strawberryperl.com/.