news Active Directoryのユーザー一覧を取得し、各メンバーがどのグループに属しているかを出力するサンプル

本記事では、Active Directory(AD)アクションを使用して、ドメインユーザー一覧を取得したのちに、各ユーザーがAD上のどのグループに属しているかを出力するサンプルを紹介します。

なお、Active Directoryアクションは、以下の条件を満たさなければ稼働しませんのでご留意ください。
・AutoMateを稼働させるPCがドメインに属しており、かつドメインユーザーでAutoMateが実行されていること
・認証情報に指定したドメインユーザーが、操作対象に対して必要十分な権限を保有していること
(特に、「削除」は「フル コントロール」でなければ稼働しない場合があります)

本サンプルは、以下の流れで処理を実行します。
1. ドメイン管理者として実行し、ユーザー一覧をデータセットに取得
2. 1のデータセットをもとにして、ユーザーの属性「memberOf」を取得する
3. 2の結果取得された結果を変数に格納する。なお、どの組織/グループにも属していない場合エラーになるので、エラーになった場合は次のステップに進み「所属なし」をセットする
4. 取得結果一覧を、テキストファイルに出力するか、ダイアログに出力するかをユーザーに選択させる。なお、結果が30レコードを超えている場合は、ファイル出力を推奨するメッセージを追加する。

以下、サンプルです。

<AMSHOWDIALOG MESSAGE="このタスクは、実行する端末が対象のドメインに入っていなければ稼働しません。" COUNTDOWNDELAY="5" />
<AMVARIABLE NAME="var_ADAdminUser" VALUE="automatedemo" DESCRIPTION="Active Directoryの管理者権限をもったユーザー" />
<AMVARIABLE NAME="var_ADAdminPass" VALUE="AAAaaa000" DESCRIPTION="Active Directoryの管理者ユーザーパスワード" />
<AMVARIABLE NAME="var_Domain" VALUE="amdemo" DESCRIPTION="ドメイン名" />
<AMVARIABLE NAME="var_ListOfMembers" VALUE="名前 所属組織" DESCRIPTION="メンバーのリストと所属するグループ一覧" />
<AMVARIABLE NAME="var_MemberOf" VALUE="" />
<AMVARIABLE NAME="var_IsFileOutput" VALUE="1" DESCRIPTION="出力結果をファイルに出すかダイアログに出すかを選択" />
<!--以下、認証情報には上で定義したドメイン管理者情報を使用している。ただし、ドメイン管理者でログオンしてこのタスクを実行するなら、認証情報は「Default」でよく、上記の認証情報の設定は必要ない。-->
<!--「Users」配下のメンバー取得-->
<AMACTIVEDIRECTORY ACTIVITY="list_object_path" AUTHTYPE="None" USERNAME="%var_ADAdminUser%" LDAPPATH="LDAP://CN=Users,DC=%var_Domain%,DC=local" FILTER="*" RESULTDATASET="ds_ADUsers" PASSWORD="AM5K/9dDUOSshiql9JlIHXq4Ygp/IEOarRRqp82KloDDd4=aME" />
<!--「Users」配下のメンバー全員について、所属するADグループの一覧を取得する-->
<AMLOOP ACTIVITY="dataset" DATASET="ds_ADUsers" />
<!--該当するユーザーがどこのメンバーもなかった場合はエラーになるので、エラーを無視して次に進む-->
<AMACTIVEDIRECTORY ACTIVITY="get_object_property" AM_ONERROR="CONTINUE" AUTHTYPE="None" USERNAME="%var_ADAdminUser%" PASSWORD="AM5nyOaG1q3nI4oFstFR6oTPEE1jvqY+aVouo3NvtVY33I=aME" LDAPPATH="%ds_ADUsers.Path%" PROPERTYNAME="memberOf" ADOBJECT="user" RESULTVARIABLE="var_MemberOf" />
<!--どこかに属していた場合はそのグループを、どこにも属していない(=エラーになる)場合は、「所属なし」とする-->
<AMIF ACTIVITY="last_step" />
<AMVARIABLE ACTIVITY="set" VARIABLENAME="var_ListOfMembers">%var_ListOfMembers &amp; vbCrLf &amp; ds_ADUsers.Name &amp; vbTab &amp; var_MemberOf%</AMVARIABLE>
<AMELSE />
<AMVARIABLE ACTIVITY="set" VARIABLENAME="var_ListOfMembers">%var_ListOfMembers &amp; vbCrLf &amp; ds_ADUsers.Name &amp; vbTab &amp; "所属なし"%</AMVARIABLE>
<AMIF ACTIVITY="end" />
<AMLOOP ACTIVITY="end" />
<!--結果をファイル出力するか、ダイアログ出力するかをユーザーに選択させる 結果が30行以上の場合は、ファイル出力を推奨するメッセージを出す-->
<AMSHOWDIALOG ACTIVITY="select" MESSAGETEXT="結果出力形式を選択してください。%vbCrLf%ファイル出力の場合、結果はデスクトップに「ADユーザーリスト.txt」として保存されます。%if(ds_ADUsers.TotalRows &gt;= 30, vbCrLf &amp; &quot;※※30行以上あるため、ファイル出力を推奨します※※&quot;, &quot;&quot;)%" RESULTVARIABLE="var_IsFileOutput" ITEMS="ファイル出力,ダイアログ出力" VALUES="1,0" INDEXSELECTED="1" WINDOWTITLE="出力形式の選択" COUNTDOWNDELAY="30" />
<AMIF EXPRESSION="%var_IsFileOutput% = 1" />
<AMFILESYSTEM ACTIVITY="write_file" FILE="%GetDesktopDirectory()%\ADユーザーリスト.txt" APPEND="no">%var_ListOfMembers%</AMFILESYSTEM>
<AMSHOWDIALOG WINDOWTITLE="アイテムを選択してください。" COUNTDOWNDELAY="10">「%GetDesktopDirectory()%\ADユーザーリスト.txt」に結果を出力しました。
ご確認ください。</AMSHOWDIALOG>
<AMELSE />
<AMSHOWDIALOG>結果は以下の通りです。
-------------------------------------------------------
%var_ListOfMembers%</AMSHOWDIALOG>
<AMIF ACTIVITY="end" />