Users

如何在 Samba Active Directory 中導出完整的使用者列表?

  • December 19, 2017

我有一個 Active Directory 執行Samba 4.6.3在一個伺服器上Debian Jessie。在 Windows 7 PC(AD 客戶端)上,我安裝了RSAT,並從那裡使用管理員帳戶管理伺服器,但現在我需要以可讀格式導出完整的使用者列表,最好是.csv

使用RSAT(來自 Windows 中的客戶端)到目前為止,我只能設法導出一個OU(組織單位)內的所有對象,一次OU一個,無論OU是使用者容器還是 PC 容器,也就是說,我可以做什麼我想通過為每個OU使用者容器重複該過程來(導出完整的使用者列表),但我有很多OU使用者容器。

問題:有沒有什麼方法可以快速導出完整的使用者列表,包括姓名和姓氏,OU並且無需重複工作?

PD:答案不必局限於帶有 RSAT 的 Windows 中的客戶端,也可以在 Samba 伺服器中

Bash 解決方案.. 部分…

從提取 AD 內容開始:

ldapsearch -s -h <ADHOST> -P <ADPORT> -D <USERDN WITH RIGHTS TO READ AD> -W -E pr-1000/noprompt -b <BASEDN FOR SEARCH> > ad_extract_tmp.ldif

“-W”強制互動式提示輸入使用者密碼。您不希望它出現在命令歷史記錄中。如果您將其組合到一個腳本中,那麼您可以使用“-w”並保護密碼訪問。

現在內容已被提取到文本文件中,我們可以使用文本處理將其轉換為 CSV 或我們想要的任何其他格式。

ldif 文件被包裝,所以第一步是解開它

awk ' BEGIN (RS="\n\n"; FS="\n "} {for (i=1,i<=NF;i++) printf $i; printf "\n\n"}' ad_extract_tmp.ldif > ad_extract_tmp.ldif.unwrapped

在這裡,我們將記錄重新定義為包含一個帶有兩個行尾的文本塊和一個包含一個只有一個行尾和一個空格的文本塊的欄位。接下來,我們將每一行作為一個欄位處理,將 ldif 包裝的點贊(“\n”)連接到一個欄位中。現在我們有了一個展開的 ldif,最後一步是將 ldif 轉換為 csv。

awk ' Begin {
            record = "false";
            print "\x22uid\x22,\x22dn\x22";
 }
 { if ( record = "true") {

      if ( $0 ~ /~sAMAccountName./) {
        uid = $0;
        sub (/^.*: /,"",uid);
       }

      if ( $0 ~ /^\s*$/) {
          print "\x22" uid "\x22,\x22" dn "\x22";
          dn = "";  record = "false";
        }
     }
 }
 {
   if ($0 ~ /^dn:./) {
      record = "true";
      dn = $0;
    }
 }' ad_extract_tmp.ldif.unwrapped > ad_extract.csv

這是一個大大簡化的 awk 轉換腳本,它將解開的 ldif 轉換為 csv。

可以將 dn 提取給使用者 ou 並獲取所需的其他欄位。只需擴展最終的 awk 腳本。

引用自:https://unix.stackexchange.com/questions/411834