Power Automate DesktopでActive Drectoryに新規ユーザーを作成するフローを構築する。

概要
---
この記事では、Power Automate Desktopのデスクトップフローを使用して
ADサーバーに接続し、新規ユーザー作成を行ってみたいと思います。

Power Automate Desktopには、Active Drectoryの操作を行うアクションが用意されています。
今回はその中の3つのアクションを使用してフローを作成してみたいと思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2326020/78ef212e-9c22-c9a1-a88a-5c77cbd8782e.png)

検証環境の構成イメージです。
Azure 仮想ネットワーク上に接続先となる
ADサーバーとデスクトップフローを実行するロボサーバーを構築しています。

流れとしてはFormsから登録申請があった場合にクラウドフローが実行され、
申請されたユーザー情報をデスクトップフローに受け渡して
ユーザー作成が行われる というものです。
登録が正常に完了した場合、Teamsによって通知を行います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2326020/41b3e5fb-eea5-a8e2-b48b-623cad6b8ed9.png)


※クラウドフローの作成手順は割愛しますが、フロー内容は以下の通りです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2326020/fe91ccc4-bba4-a134-6d49-522949b09417.png)

前提条件
---
本手順を行う前に前提条件として、下記2つが必要となります。
・Power Automate Desktopの**有償ライセンス**
※私は期間限定ですが**試用版**で構築しました！
・Power Automate Desktopを動かすマシンをPower Automateに登録できていること
(下図のようにPower Automateの「監視」→「マシン」に実行するマシンが登録されている状態です)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2326020/1f97d734-8b7d-945e-67c0-d22fa2772bd9.png)


手順（１）入出力変数を作成する
---
Power Automate Desktopで
新しくフローを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2326020/108548d2-2f7f-5bb4-1d0d-d2fcb7b7ec01.png)


フローデザイナー画面が表示されたら、右側にある「入出力変数」枠内の
追加ボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2326020/03213f9d-4c4b-73ff-3d41-8624d73a5e1b.png)

クラウドフローから値を受け取るための入力変数から作成するので、
「入力」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2326020/f47334a4-08e2-6f04-8d76-959752265b9b.png)

入力変数の作成画面が表示されます。
変数名は初期値で「NewInput」となっているので、任意の値に変更します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2326020/16ce1007-aa05-435d-df58-6fe633757c4d.png)

作成後、入出力変数に追加されたことを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2326020/74a043fa-e564-a5ef-d54b-3b55dbaae4a5.png)

同じ手順で、「LastName」の入力変数も作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2326020/5f6f5858-11a8-6811-f7e4-1d6b069f2d88.png)


続いて、出力変数を作成します。
※出力変数の設定は必須ではありません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2326020/98105e99-f6ec-81d7-6366-81ed04dd86bc.png)

出力変数には、ユーザー作成完了後にTeamsで送信する
メッセージを格納したいと思いますので、変数名・外部名を「TeamsMessage」として作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2326020/1e6ecebe-3cbb-b662-3c8c-8904cc65e0fc.png)

出力変数が作成されたことを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2326020/f76d6c39-4905-1a35-aca5-6a2cf3ec6e09.png)


手順（２）Active Directoryを操作するアクション設定
---
アクションの一覧から、「サーバーに接続」アクションを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2326020/64aefb7e-13c5-8023-b3f4-db5215b9f305.png)

設定画面で、各設定値を入力します。
LDAPパスは図に記載されていると通り、
**「LDAP://<ドメイン名>」**の形式で入力してください。
ユーザー名は**「<ドメイン名>¥<ユーザー名>」**の形式で入力してください。
※Active Directoryにユーザーを作成する権限のあるユーザーを指定してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2326020/3f93e1d6-f014-013c-1613-500dd48eb15d.png)

アクションの設定後、テスト実行をしてみましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2326020/5f6748c2-03d8-d849-b6d4-5be4b54b0731.png)

続いて、アクションの一覧から、
[Active Directory]-[ユーザー]の配下にある「ユーザーを作成」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2326020/69f5e0eb-f0ef-2a3a-54fc-98cba0044865.png)

各設定値を入力します。
親ディレクトリエントリ：
アクション「サーバーに接続」を**作成した際に生成された変数
「%ParentDirectoryEntry%」**が自動的に設定されます。
場所：**ユーザーを作成する場所**を指定します。
指定方法は図の通り、**「CN=xxx,DC=xxx,DC=xxx」**の形式で入力します。
名：入力変数「FirstName」を設定します。
姓：入力変数「LastName」を設定します。
ユーザー名：入力変数「FirstName」と「LastName」を足した値を設定しています。
パスワード：作成するユーザーに設定するパスワードを入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2326020/29c622ea-bfb5-e6ac-706e-32cfaf8a462a.png)


続いて、作成したユーザー情報にメールアドレスを設定したいと思います。
アクションの一覧から、
[Active Directory]-[ユーザー]の配下にある「ユーザー情報の更新」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2326020/755787b7-cfe9-d9f7-a9c6-e3a3f07082b6.png)

アクション「サーバーに接続」を**作成した際に生成された変数
「%ParentDirectoryEntry%」**が自動的に設定されます。
識別名：情報を更新するユーザーの識別名を指定します。
指定方法は図の通り、**「CN=<ユーザー名>,CN=xxx,DC=xxx,DC=xxx」**
の形式で入力します。
ユーザーのメールアドレス：今回は入力変数「FirstName」「LastName」と
ドメイン名を組合わせた値を設定しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2326020/de42e95f-c657-0194-a047-bb1a67b45e9e.png)



Active Directoryを操作するアクション設定は以上です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2326020/a9f3054d-a693-218a-097d-e0ee213b5a42.png)

手順（３）Teamsで送信するメッセージの設定
---
出力変数「TeamsMessage」の設定を行いたいと思います。
アクションの一覧から、「変数の設定」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2326020/def15a2b-c327-2596-e649-06affcdb072a.png)

変数の設定画面で、設定する変数「TeamsMessage」を選択し、
「宛先」欄に任意のメッセージを入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2326020/f6aa90aa-6c4f-2f7d-c925-d330e71971f3.png)

これでデスクトップフローの設定は完了です。保存しておきましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2326020/85527ccf-d9b8-3002-fbe7-c53916a98575.png)

手順（４）クラウドフローの設定・確認
---

作成したデスクトップフローをトリガー実行(Formsから申請を受けたときに実行)する場合
クラウドフローで対象のデスクトップフローを指定する必要があります。

実行するデスクトップフローの実行は
「デスクトップ用Power Automateで構築したフローを実行する」というアクションを設定します。
Desktopフロー：作成したデスクトップフローを選択する
実行モード：**マシンの実行状態**を指定します。
今回は「非アテンド型」(サインアウトされている状態)を指定します。
(アテンド型で設定するとうまくいかず・・・)
FirstName/LastName：**デスクトップフローで作成した入力変数名**が表示されるので、
Formsから受け取った値を設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2326020/ffe1d26d-e388-f13a-3129-83f185d8873f.png)

アクション「チャットまたはチャネルでメッセージを投稿する」で、
対象となるTeamsのチーム、チャネル、メッセージを設定します。
メッセージにはデスクトップフローで**出力変数として設定した
「TeamsMessage」**を設定しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2326020/f1842e1c-d123-3695-1af3-5eb64fd43701.png)

手順（５）動作を見てみましょう
---
作成したフローがちゃんと動くか確認してみましょう。
Formsで新規ユーザー登録を行ってみます。
FirstName：Merry
LastName：Xmas
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2326020/88fbbf5a-f05d-40ff-28ec-38106bdeb0e6.png)

Formsを実行後、クラウドフローが実行されていることを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2326020/329f6d6c-b49e-93de-f663-1cb1a349b140.png)

正常に実行が完了したようです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2326020/fb192e36-11ee-f850-eaa0-8c712a906bd7.png)

ADサーバーに接続し、Active Directoryのユーザーを確認すると
無事追加されていました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2326020/f0311da3-da6a-e22b-4d4c-80ebf00c09c2.png)

メールアドレスも大丈夫そうです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2326020/21e6e079-225e-5095-a144-9a536e2486a7.png)

Teamsの指定したチャネルにもメッセージが届いていました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2326020/c7f1c2cd-2ce4-d404-1d68-f9be904dfc62.png)


所感
---
今回の手順はかなりべた書きにしてしまいましたが、
各設定値は変数に入れたほうが確実に良いです。（省いて申し訳ありません。）

もっとしっかり作るのであれば条件分岐を入れて
ユーザーが二重登録されていないか、同姓同名のユーザーの場合のフローなどは
設定する必要がありますね。