ホチキス先生の「プログラマーと呼ばれたい」

InfoPath & SQL Server ! Office365 ! Microsoft365 ! Power Apps ! Power Automate ! Microsoft Power Fx !

システム管理者のための考察 – Active Directoryユーザー一括作成はVBS、VBScriptでやろう

leave a comment »

Active Directoryを使うと、たいへん合理的にシステム全体を管理、運用することができる。Active Directoryの技術は、システム全体をMicrosoft Windows Systemで統合する最も大きな理由であるといえる。ファイルサーバー、プリンタなどシステムリソースへのアクセス管理、Webアクセス管理、監査、データベースのアクセス権など、ユーザー管理を一元化し権限を統合的にしかもわかりやすく簡単に扱えることは極めて大きなメリットである。

ユーザー管理においては、一般の企業であっても一定以上の従業員規模では、画面を操作するGUI環境で手作業でやっていては追いつかないだろう。ましてや私が勤める学校のようなところでは、毎年数百名規模の新入生のユーザー登録を行わなければならない。このとき、なんらかの名簿リストを用いて一括でユーザー作成をしたい。

いまでもそうだが、Active Directoryのユーザー作成を一括で行うことについてWebで検索をすると、CSVDE.EXEやLDIFDE.EXE、DSADD.EXEなどのコマンドを使う方法や、Windows 2000 Server時代のリソースキットによるADDUSERS.EXEを使う方法などが上位にあらわれる。しかしこれらの手法はユーザー作成に関して限定的な古い手法である。もちろんこれらの手法はActive Directoryに関する情報があまりない時代に極めて有用な情報であって、だからこそいまだにWeb検索で上位にヒットするのだが、Active Directoryのユーザー一括作成について今後はPower Shellに取って代わられると思うが、現時点で最も有効な方法はVBScript略してVBSを使う方法だと思う。VBScriptあるいはVBSは、Windows Script Host略してWSHとも言われるスクリプト実行環境で実行される、テキストファイルに記述したスクリプトを実行するものである。この手法はWindows 2000 ServerからWindows Server 2008 R2まで共通して使える手法である。

VBSはテキストファイルに記述する。サンプルとして次のようなスクリプトをテキストファイルに記述してみよう。少し長いがメモ帳で一行で記述する。

————————————————————————————–

Set objOU = GetObject(“LDAP://OU=生徒,dc=kyoiku,dc=local”) :Set objUser = objOU.Create(“user”, “cn=0000000 VBSでユーザー作成”) : objUser.Put “sAMAccountName”, “0000000” : objUser.SetInfo:objUser.Put “sn”,”snは姓”: objUser.Put “givenName”,”givenNameは名”: objUser.Put “displayName”,”displayNameまたはDNは表示名”: objUser.Put “initials”,”initia”: objUser.Put “description”,”descriptionは説明”: objUser.Put “userPrincipalName”,”userPrincipalNameはログオン名”: objUser.setPassword “kofu&1234” : objUser.AccountDisabled = FALSE: objUser.SetInfo

————————————————————————————–

実際にメモ帳に記述したところは次のとおりだ。

vsbでユーザー作成_メモ帳

<Fig.1 メモ帳で作ったActive Directoryにユーザーを生成するVBScript>

メモ帳でこのテキストファイルを保存すると、拡張子.txtのファイルが生成するが、この拡張子を.vbsに変更するとサーバー上でVBScriptとして実行できるようになる。実行すると「kyoiku.local」というドメインの「生徒」というOUにユーザーアカウントが生成する。実際にできたユーザーは次のようになっている。

vsbでユーザー作成001

<Fig.2 VBScriptで生成したユーザーのプロパティ「全般」>

vsbでユーザー作成003

<Fig.3 VBScriptで生成したユーザーのプロパティ「アカウント」>

VBScriptの設定項目と生成したユーザーアカウントのプロパティを比べると、設定したい項目についてVBScriptでどう記述すればよいかががわかるはずだ。

これをみると、サーバーにログオンし、管理ツールのGUI環境でやっていると意識しないが、ActiveDirectoryではユーザー情報に関して類似の異なる複数の項目が管理されていることがわかるだろう。「cn」、「sAMAccountName」、「sn」、「givenName」、「displayName」、「initials」、「description」、「userPrincipalName」などだ。

では、大量のユーザー情報からどうやってこのVBScriptを生成するかだが、それにはいろいろな方法がある。たとえばエクセルなどで生成したいユーザーの基本情報、つまりログオンIDや初期パスワード、氏名、などをリストにしておき、セルの結合でスクリプトを生成することができるだろう。もちろんアクセスデータベースを使ってもいいし、SQL Serverで生成してもいい。生成した文字列をテキスト形式でエクスポートし、拡張子を.vbs変えて実行すればよいのだ。

ただデータベースから文字列をエクスポートするとき、文字を「”」で囲んでしまうような処理を自動的にやってしまうアプリケーションもあるので注意が必要だ。その場合でも「メモ帳」の文字置換機能を使って不必要な記号を削除して実行すればよい。

Written by Yoshio Matsumoto

2011年9月8日 @ 6:30 午後

コメントを残す