コマンドラインによるActiveDirectoryユーザーの作成方法

# 概要
ActiveDirectoryにユーザーを追加するときにはGUIから行うのが一般的だけど、エクセルやCSVなんかで一覧をポンと渡されて後はヨロシクされる時がある。
で、大概にして手作業するにはちょっと...という人数が載っている。例えば1000ユーザーとか。
こんな数をGUIから手作業していると日が暮れるので、コマンドでさくっと登録するための手順をまとめておく。

検証環境:

* OS : WindowsServer2012R2
* フォレスト/ドメインレベル: WindowsServer2012R2
* ドメイン名: sample.local



# コマンドラインでActiveDirectoryオブジェクトを操作する方法
一括操作を説明する前に操作コマンドをまとめておく。

なお、コマンド上での操作はDN(識別名)が頻出するため、詳細は以下のURLを確認しておくこと。
https://msdn.microsoft.com/en-us/library/aa366101(v=vs.85).aspx

## ActiveDirectoryユーザーを作成する
やろうと思えば1行で細かく設定されたユーザーを作ることができるけど、コマンドがすごく長くなるためなるべくシンプルな例を示す。それでも長い。

```bat:
コマンド:
dsadd user "{ユーザーDN}" -display "{表示名}" -pwd "{パスワード}" -pwdneverexpires yes -upn "{ユーザーID}@{ドメイン名}"

例:
dsadd user "CN=test,CN=Users,DC=sample,DC=local" -display "テスト" -pwd "password" -pwdneverexpires yes -upn "test@sample.local"
```

例のコマンドを実行すると次のような状態で作成される。

* ActiveDirectoryユーザーとコンピューター
    * sample.local
        * Users
            * test

細かい設定はあとで変更も可能なので、とりあえずこれで作成しておく。

参考URL:
https://technet.microsoft.com/ja-jp/library/cc731279(v=ws.10).aspx
https://technet.microsoft.com/ja-jp/library/cc732954(v=ws.10).aspx


### ユーザーのプロファイルパスを指定する
![移動プロファイル](https://technet.microsoft.com/ja-jp/library/jj649079(v=ws.11).aspx)を指定しておきたい場合もある。その場合は次のコマンドで設定できる。

```bat:
コマンド:
dsmod user "{ユーザーDN}" -profile "プロファイルパス"

例:
dsmod user "CN=test,CN=Users,DC=sample,DC=local" -profile "\\sample.local\profiles\test"
```




## ActiveDirectoryグループを作成する
グループを沢山作るようなシチュエーションはあまりないけど、せっかく調べたので書いておく。

```bat:
コマンド:
dsadd group "{グループDN}"

例:
dsadd group "CN=tests,CN=Users,DC=sample,DC=local"
```


参考URL:
https://technet.microsoft.com/ja-jp/library/cc754037(v=ws.10).aspx
https://technet.microsoft.com/ja-jp/library/cc732423(v=ws.10).aspx


### グループにユーザーを参加させる
```bat:
コマンド:
dsmod group "{グループDN}" -addmbr "{ユーザーDN}"

例:
dsmod group "CN=tests,CN=Users,DC=sample,DC=local" -addmbr "CN=test,CN=Users,DC=sample,DC=local"
```


### グループからユーザーを脱退させる
```bat:
コマンド:
dsmod group "{グループDN}" -rmmbr "{ユーザーDN}"

例:
dsmod group "CN=tests,CN=Users,DC=sample,DC=local" -rmmbr "CN=test,CN=Users,DC=sample,DC=local"
```


# ActiveDirectoryユーザーを一括操作する
エクセルなどの表計算ソフトを使うことで、ユーザー作成が非常にラクになる。
ここでは、以下の要件を満たす操作バッチを作成するものとする。

* ID・パスワード・氏名が一覧化したエクセル名簿データがある
* フォルダリダイレクトをさせたい
* フォルダリダイレクト先は`\\sample.local\documents\ユーザーID`
* フォルダリダイレクト先は原則そのユーザーしかアクセスできないようにしたい


## コマンド生成用ファイルを作る
Excelを起動して、各セルに以下の内容を入力する。

```:A1セル
user-id
```
```:B1セル
password
```
```:C1セル
表示名
```
```:D1セル
=IF(ISBLANK(A1),"","dsadd user ""CN="&A1&",CN=Users,DC=sample,DC=local"" -display """&C1&""" -pwd """&B1&""" -pwdneverexpires yes -upn """&A1&"@sample.local""")
```
```:E1セル
=IF(ISBLANK(A1),"","mkdir \\sample.local\documents\"&A1)
```
```:F1セル
=IF(ISBLANK(A1),"","icacls \\sample.local\documents\"&A1&" /grant:r "&A1&":(OI)(CI)(F)")
```


全部入力し終えたら、以下のような状態になっていることを確認する。
<img src="https://qiita-image-store.s3.amazonaws.com/0/97774/d5fa8c7d-cb42-45d8-bac2-921a1d8e3dc1.png" width=50% />

問題がなさそうであれば、D1:F1列を選択して選択範囲の右下にある■マークを掴んでビーッと下まで自動入力させる。
登録予定のユーザー数あたりまで引っぱっておけばとりあえずいいと思う。


## 名簿データを投入する
コマンド生成用ファイルのA列にユーザーID、B列にパスワード、C列に表示名をコピーして入力する。(1行目に書いてあるデータは上書きしてしまってかまわない。)
余計な書式とかはいらないので、右クリック→テキストのみ保持で文字データのみ貼り付けること。

<img src="https://qiita-image-store.s3.amazonaws.com/0/97774/ff60b9dc-f9c8-2002-e883-73c9e360502a.png" width=50% />


## バッチファイル化する
DEF列がそれぞれコマンドとなるので、適当にバッチファイルを作成してコピペする。
初めから大量のユーザーを作成するとミスがあった場合に大惨事になるので、2-3件でテストしておくこと。

```bat:useradd.cmd
@echo off

dsadd user "CN=test1,CN=Users,DC=sample,DC=local" -display "テスト1" -pwd "password" -pwdneverexpires yes -upn "test1@sample.local"
dsadd user "CN=test2,CN=Users,DC=sample,DC=local" -display "テスト2" -pwd "password" -pwdneverexpires yes -upn "test2@sample.local"
dsadd user "CN=test3,CN=Users,DC=sample,DC=local" -display "テスト3" -pwd "password" -pwdneverexpires yes -upn "test3@sample.local"

mkdir \\sample.local\documents\test1
mkdir \\sample.local\documents\test2
mkdir \\sample.local\documents\test3

icacls \\sample.local\documents\test1 /grant:r test1:(OI)(CI)(F)
icacls \\sample.local\documents\test2 /grant:r test2:(OI)(CI)(F)
icacls \\sample.local\documents\test3 /grant:r test3:(OI)(CI)(F)

pause
```


## バッチファイルをドメインコントローラー上で実行する
適当な場所に作成したバッチファイルを置いて実行する。
正常に動作したことを確認できればOK。何かエラーが発生したらメッセージが表示されているはずなので、よく確認すること。

以上