Windows 7 PC(ADクライアント)でActive Directoryを実行していますSamba 4.6.3
。Debian Jessie
衛星アンテナここでは管理者アカウントを使用してサーバーを管理しますが、今ではユーザーの全リストを読みやすい形式でエクスポートする必要があります。.csv
使用衛星アンテナ(Windowsのクライアントでは)これまでは、ユーザーコンテナでもPCコンテナでも、一度に1つOU
(組織単位)内のすべてのオブジェクトのみをエクスポートできます。各ユーザーコンテナに対して完全なユーザーリストをエクスポートするプロセスがありますが、ユーザーコンテナが多数あります。OU
OU
OU
OU
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スクリプトを拡張するだけです。