【问题标题】:Convert CSV to LDIF for import into ldap?将 CSV 转换为 LDIF 以导入 ldap?
【发布时间】:2012-02-14 02:57:15
【问题描述】:

我有一个 MSSQL 数据库,表中有 13k 个用户,表中包含用户名、密码、fname、lname 等标题。我希望能够将这些数据转换为适当的 ldap 服务器。

目前我已经完成了以下工作:在 mssql 服务器上创建一个作业,以每小时以 csv 格式导出该表。查询提取用户名、密码、fname、lastname 和 memberid。每小时将此数据 ftp 到我的 linux ldap 服务器。

有人可以推荐一种方法来将此 csv 转换为 ldif,以便我可以运行 ldapmodify 并将所有这些条目放入我的 ldap 服务器中吗?我假设我可以编写一个解析器,但很想知道是否已经有一种产品可以以这种方式进行 csv 到 ldif 的转换,以及这个计划是否有意义或者是否有更好的方法来做到这一点?谢谢。

【问题讨论】:

    标签: csv ldap ldif


    【解决方案1】:

    以防万一有人还在寻找类似的东西,我制作了一个 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
    

    【讨论】:

      【解决方案2】:

      一个简单的Google search 揭示了几个 CSV 到 LDIF 转换器。

      例如scv2ldif2.pl。它在 Perl 中,但您可以找到至少几个 Perl 的 Windows 实现(例如 Strawberry Perl

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多