Samba Active Directoryから完全なユーザーリストをエクスポートするには?

Samba Active Directoryから完全なユーザーリストをエクスポートするには?

Windows 7 PC(ADクライアント)でActive Directoryを実行していますSamba 4.6.3Debian Jessie衛星アンテナここでは管理者アカウントを使用してサーバーを管理しますが、今ではユーザーの全リストを読みやすい形式でエクスポートする必要があります。.csv

使用衛星アンテナ(Windowsのクライアントでは)これまでは、ユーザーコンテナでもPCコンテナでも、一度に1つOU(組織単位)内のすべてのオブジェクトのみをエクスポートできます。各ユーザーコンテナに対して完全なユーザーリストをエクスポートするプロセスがありますが、ユーザーコンテナが多数あります。OUOUOUOU

OU質問:この繰り返し操作を実行せずにユーザー全体のリスト(名前と姓、相手を含む)をすばやくエクスポートする方法はありますか?

PD:答えはRSATを使用するWindowsクライアントに限定される必要はなく、Sambaサーバーにも存在する可能性があります。

答え1

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

ここでは、2行末のテキストブロックで構成されるようにレコードをオーバーライドし、1行末と1つのスペースのみを含むテキストブロックで構成されるようにフィールドをオーバーライドします。次に、各行をフィールドとして処理し、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

これは、ラップされていないldifをcsvに変換するかなり単純化されたawk変換スクリプトです。

ユーザーouのdnを抽出し、必要な他のフィールドを追跡することができます。最後のawkスクリプトを拡張するだけです。

関連情報