web-dev-qa-db-ja.com

Active Directoryから情報(名前、電話番号、場所など)をcsvファイルにエクスポートするバッチスクリプト

私の職場の秘書は、名前、電話番号、従業員の場所をリストしたスプレッドシートを使用して、誰かが尋ねた場合に情報を調べます。この情報はすべてADにありますが、問題は急速に成長している会社であり、人々が場所、役職、電話番号を頻繁に変更するため、スプレッドシートが頻繁に古くなっていることです。私は低レベルの技術者ですが、上司から、ADに入るコンピューターから実行できる、ある種のバッチスクリプトを作成し、この情報をcsvにプルして、それをスローするように提案されました。 Excelドキュメントに。

私はスクリプティングにあまり精通していないので(学校では少しpythonでしたが、それほど多くはありませんでした))、正しい方向へのポインターを探しているだけだと思います。スクリプトで必要なことはほぼ正確にわかりますが、ADとやり取りしてそこから情報を取得するためのコマンドがどこにあるのかわかりません。バッチスクリプトでこれを行うこともできますか?また、特定のアクセス権が必要ですか彼女のコンピューターからそれを実行するためにADに?

2
James F

Windows NT 4を使用している場合を除き、Windows PowerShellを使用することをお勧めします。これは強力で非常に使いやすいです(少なくともVBScript、KiXtartなどと比較して)

PowerShellを使用してActiveDirectoryと対話し、そこからデータを取得するには、PowerShell用のActiveDirectoryモジュールを使用する方がはるかに簡単です。

ADモジュールを配置すると、ADにユーザーデータを簡単にクエリできます。

Import-Module ActiveDirectory

# define the attributes we are interested in, this is the ldap-display-name of the attributes
$InterestingAttributes = "displayName","physicalDeliveryOfficeName","telephoneNumber"
# Use Get-ADUser to retrieve all enabled users, Select-Object to filter out stuff like the object DN
$ADUsers = Get-ADUser -LDAPFilter "(!(userAccountControl:1.2.840.113556.1.4.803:=2))" -Properties $InterestingAttributes |Select-Object -Property $InterestingAttributes

$ADUsers | Export-Csv -Path "C:\Users\HerAccountName\Desktop\Users.csv" -NoTypeInformation

これらの属性はすべてパブリックです。つまり、自分でスクリプトを実行できるため、スクリプトを実行するための管理者は必要ありません。

2

秘書がMicrosoft Office 2013 Professional Plus、Office 365 ProPlus、またはExcel 2013 Standaloneを持っている場合、Excel Power Queryを使用して、Active Directoryから直接その情報をExcelにプルできます。 Excel Power Queryメニューオプションから[他のソースから]を選択し、[Active Directoryから]を選択します。必要なデータをPowerQueryエディターから選択して、いつでも更新可能なレポートを作成できます。追加の権利は必要ありません。

Power Queryアドインのダウンロードはこちらから入手できます: https://www.Microsoft.com/en-ca/download/details.aspx?id=39379Excel-FX104018616.aspx

1
Rory

[〜#〜] i [〜#〜]が以前の雇用主で同様の問題をどのように解決したかをお話しできます。私たちはWindowsをホストADとExchangeにのみ使用しており、社内の他のすべてのサーバーは FreeBSD を実行していたため、 adtool これはActive Directoryクライアントとして機能し、リストまたは個々の属性を吐き出します。 adtoolを使用すると、ドキュメントに従ってADサーバーへのアクセスを構成した後、次のようなシェルコマンドを使用して基本リストを取得します。

$ adtool list ou=user,dc=example,dc=com

各レコードに必要な追加情報については、レコードをクエリして結果を解析できます。

$ adtool attributeget <object> <attribute>

スクリプトでは、これは次のようになります。

#!/bin/bash

fmt='"%s","%s","%s"\n'    # Grow as required

adtool list ou=user,dc=example,dc=com | sed -e 's/^\S*=/"/;s/,\S*/"/' | while read name; do
  sAMAccountName=$(adtool attributeget "$name" sAMAccountName)
  email=$(adtool attributeget "$name" mail)
  somethingelse=$(adtool attributeget "$name" somethingelse)
  # etc
  printf "$fmt" "$sAMAccountName" "$email" "$somethingelse" ...
done

このbashスクリプトは、データをstdoutに送信することを目的としているため、サーバー上にあるファイルにリダイレクトしたり、Excelにインポートするためにスタッフのワークステーションにコピーしたりできます。 完璧ではないことに注意してください。現状では、フィールド名内に存在する可能性のある二重引用符はエスケープしません。それがあなたにとってリスクであるならば、あなたはそれをあなた自身で説明することができます。

これをテストするためのADサーバーがないので、完全なソリューションを提供することはできませんが、このルートを使用してLinuxまたはUnixで自動化を構築することにした場合は、喜んでいます。データを解析している基本的なadtoolコマンドの出力が表示されたら、必要なテキスト処理を支援します。

注:LDAPクライアントを使用してActive Directoryから必要なデータをプルすることもできます(LinuxおよびBSDのほぼすべてのディストリビューションで利用可能な OpenLDAP など)。 Adtoolは便利です。

1
ghoti