Skip to main content
評価してください: 

 

プロ並みの ADSI スクリプトを作成できるツールがついに登場

Scripting Guys としての活動において最もやりがいを感じるのは、読者から寄せられた電子メールを読んでいるときです。たとえば、最初の Scriptomatic をリリースしたときには、ごくシンプルな WMI スクリプト作成ユーティリティであるにもかかわらず、数多くのメッセージが送られてきました。その一部を紹介します。

Scripting Guys 様 : Scriptomatic には感動しました。ADSI スクリプトを作成できないとは、まったく意表をつかれました。

Scripting Guys 様 : Scriptomatic の Readme ファイルを読んだときには、お腹がよじれるほど笑ってしまいました。あまりにもおかしかったので、ADSI スクリプトを作成できないことくらい大目に見てもいいと思うほどでした。

Scripting Guys 様 : 先月、私は自宅でのぬるま湯の生活に嫌気がさし、週に数時間働くだけで 25,000 ドルもらえる仕事をしました。その仕事を紹介してあげてもいいですよ。追伸 : ところで、あなたたちの作った Scriptomatic が ADSI スクリプトを作成できないことはご存じでしょうか。

このような電子メールを読んだときには、まずこう思いました。「最低な奴らだ。感謝のかけらも感じられない。こっちはただでいいものを教えているのに、このうえ要求してくるとは、厚かましいにもほどがある。そこまでしてやる必要があるのか」それでも、少し怒りが収まり、涙が乾くと、読者からのこのような反応を予想しておくべきだったことに気付きました。そもそも Scriptomatic の反響がこれほど大きかったのはなぜでしょう。WMI は、難しいテクノロジなので、コンピュータ サイエンスの学位を取得している人になら使いこなせるが、スクリプトを作成する初心者には向かないと考えられています。Scriptomatic が成功した理由には、このツールで WMI スクリプトを作成できたことのほかに、WMI スクリプトの作成がそれほど難しくはないと証明できたことがあります。難しいテクノロジとは言っても、ほとんどの WMI スクリプトはかなりパターン化されています。Scriptomatic は、ユーザーの能力不足を克服する正攻法ではありませんが、WMI を使うきっかけにはなります。

では、Active Directory の管理に利用するスクリプティング テクノロジである ADSI (Active Directory Service Interfaces) に関してはどうでしょうか。ADSI についても、システム管理者やスクリプティングの初心者には難しすぎて使いにくいと考えられています。並みはずれた才能の持ち主 (私たち Scripting Guys のような) でなければ ADSI スクリプトを作成することはできないと思われています。ADSI を使えばいろいろなことができるのに、と思っている人は多いはずです。しかし、だれも私のように ADSI を使い始めようとしません。だれもが ADSI Scriptomatic のようなものを待望していたのですから、期待と異なるものを受け取ってがっかりするのも無理はありません。

もちろん、実のところ ADSI はそれほど難しいテクノロジではなく、Scripting Guys もそれほど頭脳明晰なわけではありません (もしそうなら、その道で食べています)。にもかかわらず、WMI と同じように、だれもが ADSI は難しすぎると "思い込み"、試してみようともしません。WMI の場合と同じように、このような先入観を取り除き、ADSI を使い始めるきっかけとなるものが必要です。WMI と同様に、Scriptomatic が求められています。

Scripting Guys は周囲の要望に必ず応える、と言っても過言ではありません。現に、この半年というもの、私たちは他のプロジェクトや仕事をそっちのけで、不眠不休で ADSI Scriptomatic の開発にあたり - というのは大げさで、半年もかけたわけではありません。数日前、ADSI のことを思い出し、その場でユーザー向けのあるものを作り上げました。待望の ADSI Scriptomatic が完成しました。もう落胆させるようなことはしません。この驚くべき新しいユーティリティは、まさしく ADSI スクリプトを作成してくれます (今度は WMI スクリプトが作成できないという苦情が寄せられるのでしょうか)。

*

トピック

手順 1ADSI Scriptomatic とはどんなツール?
スクリプトとはいったい何かADSI Scriptomatic の使用方法
それでも、スクリプトの内容はコードのように見える制限事項
スクリプトの実行良くできたツールですが、Scriptomatic に Active Directory ブラウザのようなものを組み込むこともできたのでは?
頭字語についてActive Directory ブラウザは便利そうなので入手したいのですが
スクリプト センターのナビゲートADSI Scriptomatic を WMI Scriptomatic と統合した方がよかったのでは?
独り立ちのときですXbox はこれまでで最高のゲーム機で、家庭の必需品だと思いますか
初心者のためにADSI Scriptomatic の問い合わせ先は?

*

ADSI Scriptomatic とはどんなツール?

ADSI Scriptomatic をダウンロードする (英語)

既に上で説明したように、ADSI Scriptomatic は、ADSI スクリプト、つまり Active Directory を管理するために使用するスクリプトの作成を支援します。このような説明では十分ではないかもしれません (今回、何事においても十分ということは決してないということを思い知らされました)。ADSI Scriptomatic は、ADSI スクリプトの作成に関してある重要なことを教えてくれます。それは、WMI と同様、ADSI スクリプトにも決まったパターンがあるということです。たとえば、ADSI Scriptomatic では、ユーザー アカウントを削除するスクリプトを作成できます。グループや組織単位を削除するスクリプトも作成できます。このようにさまざまなオブジェクトを削除するスクリプトをよく見ると、興味深いあることに気付きます。それは、どのスクリプトもほとんど違いがないということです。これはどういうことでしょうか。盗作でもしているのでしょうか。

その可能性もあります。しかし、これらのスクリプトがよく似ている本当の理由は、ADSI では対象となるオブジェクトの種類にかかわらず、同じ方法でオブジェクトを削除することにあります。これは何を意味するかというと、ADSI Scriptomatic で作成されたスクリプトを分析すると (そして『 Windows 2000 Scripting Guide (英語)』の「 ADSI chapter (英語)」を読むと)、ほとんどすべてのオブジェクトについて、Active Directory から削除する方法を習得できるということです。1 つ例を挙げましょう。ADSI Scriptomatic をあまり複雑にはしたくなかったため、操作の対象にできるオブジェクトの種類を制限しました。ADSI Scriptomatic ではユーザー アカウントを削除するスクリプトは作成しますが、公開されたプリンタを削除するスクリプトは作成しません。何が言いたいかというと、パターンを理解すれば、公開されたプリンタを削除するスクリプトを "独力で" 作成できるようになるということです (では、ここで DeletePublishedPrintersOmatic の作成について考えてみましょう。といっても、それほど大層なことではありません)。

書いてあることを読むだけでなく、自分で理解してください。次のスクリプトは ADSI Scriptomatic で作成したもので、ユーザー アカウントを削除します。

strContainer = ""
strName = "EzAdUser"
'***********************************************
'*         Connect to a container              *
'***********************************************
Set objRootDSE = GetObject("LDAP://rootDSE")
If strContainer = "" Then
  Set objContainer = GetObject("LDAP://" & _
    objRootDSE.Get("defaultNamingContext"))
Else
  Set objContainer = GetObject("LDAP://" & strContainer & "," & _
    objRootDSE.Get("defaultNamingContext"))
End If
'***********************************************
'*       End connect to a container            *
'***********************************************
objContainer.Delete "user", "cn=" & strName

次のスクリプトは、グループを削除します。

strContainer = ""
strName = "EzAdGroup"
'***********************************************
'*         Connect to a container              *
'***********************************************
Set objRootDSE = GetObject("LDAP://rootDSE")
If strContainer = "" Then
  Set objContainer = GetObject("LDAP://" & _
    objRootDSE.Get("defaultNamingContext"))
Else
  Set objContainer = GetObject("LDAP://" & strContainer & "," & _
    objRootDSE.Get("defaultNamingContext"))
End If
'***********************************************
'*       End connect to a container            *
'***********************************************
objContainer.Delete "group", "cn=" & strName

2 つのスクリプトの違いはどこでしょうか。次に示す 2 つの項目だけです。

  • 削除するオブジェクトの名前 - 一方はグループ名 (EzAdGroup)、もう一方はユーザー名 (EzAdUser)
  • 削除するオブジェクトの種類 - 一方はグループ、もう一方はユーザー

違っている点はこれだけです。

「でもちょっと待ってください、Scripting Guys さん」と思ったことでしょう。「これら 2 つのスクリプトを見れば、公開されたプリンタを削除するスクリプトを自分で作成できると言いましたよね。実際にどうするのですか」。わかりました。それでは次に、公開されたプリンタを削除するスクリプトの作成方法について説明しましょう。ここでは、プリンタ名を EzAdPrinter とし、削除するオブジェクトの種類を printQueue と仮定します。5 分間程度で、この EzAdPrinter を削除するスクリプトを作成してみてください。私のことは気にしないでください。できるまで待っていますから。

はい、時間です。次のようなスクリプトを作成できましたか。

strContainer = ""
strName = "EzAdPrinter"
'***********************************************
'*         Connect to a container              *
'***********************************************
Set objRootDSE = GetObject("LDAP://rootDSE")
If strContainer = "" Then
  Set objContainer = GetObject("LDAP://" & _
    objRootDSE.Get("defaultNamingContext"))
Else
  Set objContainer = GetObject("LDAP://" & strContainer & "," & _
    objRootDSE.Get("defaultNamingContext"))
End If
'***********************************************
'*       End connect to a container            *
'***********************************************
objContainer.Delete "printQueue", "cn=" & strName

これと同じスクリプトが作成できたとしたら、ADSI スクリプトの基本的なパターンは習得できています。それともカンニングしましたか。それでもかまいません。そもそも Scriptomatic が優れたカンニング装置でないとしたら、何だというのでしょうか。要は公開されたプリンタを削除するスクリプトが作成できさえすればよいのです。そのスクリプトをだれが (何が) 作成したかなど、どうでもよいことです。Scriptomatic を使用して ADSI スクリプトの基礎を習得すれば、基本となるスクリプトに手を加え、望みどおりにしあげることができます。

これでもまだ ADSI Scriptomatic が史上最大の技術革新であるとは思えませんか。書いてあることを読むだけでなく、自分で理解してください。次の例で、ADSI Scriptomatic とゲーム機の Xbox を比較してみましょう。

機能ADSI ScriptomaticXbox
Active Directory オブジェクトのプロパティを変更するスクリプトを作成する。×
Active Directory オブジェクトを削除するスクリプトを作成する。×
Active Directory オブジェクトのプロパティを読み取るスクリプトを作成する。×
Active Directory オブジェクトを新規作成するスクリプトを作成する。×
Xbox Live を使用してインターネット上でゲームをする。×
Halo と Mech Assault をプレイできる。○ *
作成者が最初にリリースされた Scriptomatic の提供者と同じである。○ *
無料である。そうだったらうれしい。

*○となっていても、実際は×であることを意味します。

一目瞭然、明らかに ADSI Scriptomatic の勝ちです。ADSI Scriptomatic をダウンロードし、Xbox は処分してください。

訂正   Xbox を作っているのが Microsoft で、私たち Scripting Guys が給料をもらっている会社と同じであることを今思い出しました。Xbox は "処分しない" でください。Xbox は世界最高のゲーム機です。しかし実際は、ADSI スクリプトの作成を担当する人員を雇う必要がなく、自分で作成できるので、浮いた予算で Xbox を 2、3 台買うことができるかもしれません。

もちろん、今持っているのがゲームキューブか PlayStation だったらの話ですが。

ADSI Scriptomatic の使用方法

姉妹ユーティリティの WMI Scriptomatic と同じく、ADSI Scriptomatic も HTA (ハイパーテキスト アプリケーション) です。つまり、ADSI Scriptomatic はスタンドアロン アプリケーションとして実行できる Web ページです (ADSI Scriptomatic のコードを見ると、VBScript や HTML など、Web ページを作成するときに使用するものばかりであることがわかります)。ADSI Scriptomatic を起動するには、EzAdScriptomatic.hta をダブルクリックします。すると、次の画面が表示されます。

EzAdScriptomatic.hta をダブルクリックすると表示される画面

このように最初の画面に説明を表示することからして、他のソフトウェアとは一線を画すものとなっています。もちろん、ADSI Scriptomatic は、ただ画面を占有しているだけではありません。[Select a task] ボックスをクリックすると、ADSI を使用して実行できる主要な 4 つのタスクが表示されます。

  • Create an object
  • Write to an object
  • Read an objects properties
  • Delete an object

タスクを選択し、[Select a class] ボックスから次のいずれかを選択します。

  • User
  • Computer
  • Contact
  • Group
  • Organizational unit

この 2 つのボックスから項目を選択すると、すぐにスクリプトが作成されます。たとえば、[Create an Object] と [Computer] を選択すると、次の画面が表示されます。

[Create an Object] と [Computer] を選択すると表示される画面

このように、コンピュータ アカウントを作成するスクリプトができ上がりました (このスクリプトに少し手を加えて "銀行" のアカウント (口座) も作成できるようになったら、さらに使えるツールになると思いませんか)。このスクリプトを実行したり ([Run] をクリック)、後で使用できるように保存したり ([Save] をクリック) できるほか、思いどおりに変更を加えることもできます (自分でスクリプトを作成した場合と同じように編集できます)。これと同じことを Xbox でやってみましょう。

補足説明   ふと思ったのですが、ユーザーの要望があったら、Xbox にもスクリプトの保存機能が追加されていたかもしれません。

制限事項

コンピュータには制限事項が付きものです。でも心配は無用です。これから説明する制限事項はそれほど深刻なものではありません (「ただし、このソフトウェアを使用すると、動作しなくなるだけでなく、ライセンス契約に違反することになります」という、よくある免責事項とは違います)。最初にリリースした WMI Scriptomatic と、この画期的な ADSI Scriptomatic の間には、最低でも 1 つの相違点があることを理解していただくだけで十分です。

前の Scriptomatic は教育用ツールとして作成したもので、プリンタ、イベント ログ、サービスなどのさまざまな情報を収集する WMI スクリプトに共通のパターンがあることを実証することが目的でした。ところが、この WMI Scriptomatic を完成してから、便利なシステム管理ツールを偶然にも作成してしまったことに気付いたのです (ふとしたきっかけでクローン人間も 2 人作り出してしまいましたが、そのことは弁護士の忠告に従って伏せています)。WMI Scriptomatic で作成したスクリプトでは、何も手を加えずにローカル コンピュータに関する情報を収集できます。なぜなら、例のクローン人間たちも指摘していましたが、コンピュータ名をドット (.) に設定すると、WMI はローカル コンピュータから情報を取得するからです。したがって、コンピュータ名をハード コーディングする必要はありません。ドットを既定のコンピュータ名として使用するように設計してあります。つまり、WMI Scriptomatic で作成したスクリプトはすぐに実行できます。もう気付いているかもしれませんが、[Run] ボタンを追加したのはそのためです。

[Run] ボタンは ADSI Scriptomatic にもあります。ただし、ADSI の場合は既定の名前を使用できません。つまりコンピュータ名として使用できるドットのようなものはありません。その理由を説明するために、まずユーザー アカウントを新規作成するスクリプトについて考えてみましょう。既定のユーザー名をハード コーディングすることもできます。ここでは EzAdUser を既定のユーザー名とします。しかしそうすると、どのような場合でも実行可能なスクリプトにはならない可能性があります。このスクリプトを 1 回実行すると、EzAdUser というユーザー アカウントが作成されます。しかし、このスクリプトをもう一度実行すると、どうなるでしょうか。ユーザー アカウントは作成されません。これは ADSI や ADSI Scriptomatic に不具合が発生したからではなく、EzAdUser のユーザーが既に存在するからです。Active Directory では、同じドメイン内に重複するユーザー アカウントを作成することはできません。

ということは、ADSI Scriptomatic を使用して EzAdUser のユーザー アカウントを作成したら、その Scriptomatic は破棄するしかないのでしょうか。これも確かにソフトウェアの新しい方向性としておもしろいかもしれません。一度使ったら破棄して、また同じソフトウェアを買い直す。しかし、そんなことをする必要はありません。スクリプトを編集してから実行すればよいのです。ユーザー アカウントを作成するときには、アカウント名を変更し、ユーザー アカウントをドメイン ルートに保存する場合を除いて、アカウントを作成する Active Directory コンテナを変更します。

こんなことは難しくてできませんか。いくら簡単でも 2 つのことを同時に覚えるのは無理ですか。そう言われると思ったので、ADSI Scriptomatic にちょっとした便利な機能を追加しておきました。オンライン ヘルプです。ユーザー アカウントを作成するときに表示される画面をよく見ると、"Read this before running the create an object - user script" というハイパーリンクが目に入るはずです。

オンライン ヘルプの画面

このハイパーリンクをクリックすると、小さいウィンドウが開き、Scriptomatic スクリプトを実行可能なものにするために必要な操作の説明が表示されます。

Scriptomatic スクリプトを実行可能なものにするために必要な操作の説明書き

それほど難しい制限事項ではないと思いますが、いかがですか。一言断っておきますが、ユーザー アカウントの作成に関するオンライン ヘルプは、他のソフトウェア、たとえばゲーム機などでは表示できません。

良くできたツールですが、Scriptomatic に Active Directory ブラウザのようなものを組み込むこともできたのでは?

それは可能でした。実際、当初は ADSI Scriptomatic を起動すると必要なディレクトリ情報を取得するように設計していました。ところが、この設計は 2 つの問題を引き起こしたのです。1 つは、Microsoft の社内ネットワークなどの大規模なネットワークでは、ADSI Scriptomatic を起動してから使用できる状態になるまで 2、3 分かかってしまいます。このようなことは容認できませんでした。WMI Scriptomatic の特長の 1 つは高速であることでしたから (ちなみに、間もなくリリースされる Scriptomatic 2.0 はさらに速くなっています)。

もう 1 つの問題は、ネットワークに接続し、Active Directory の管理者アカウントでログオンする必要があることです。ADSI Scriptomatic を仕事場で使うのであれば、それでもかまわないでしょうが、自宅やバスの中で ADSI Scriptomatic をチェックするような場合はどうでしょうか。あるいは、自宅が "バス" だったらどうでしょうか。言うまでもなく、そのような状況では安定したパフォーマンスを保証できませんでした。そのため、ADSI Scriptomatic から Active Directory への依存を取り除き、いつでもどこでも良好なパフォーマンスを発揮できるユーティリティにしました (もう 1 つ付け加えると、ゲーム機のようにテレビに接続する必要もありません)。

メモ   "いつでもどこでも" の意味について説明しておきます。コンピュータに Internet Explorer 5.0 以上がインストールされていれば、ADSI Scriptomatic は正しく動作します。少なくとも、正常に起動し、スクリプトを作成できます。実際にスクリプトを "実行" するためには、コンピュータに ADSI がインストールされている必要があります。Windows 2000 以降を使用している場合は、既に ADSI がインストールされています。Windows 98 または Windows NT 4.0 を搭載しているコンピュータでは、場合によってはディレクトリ サービスのクライアント エクステンションをダウンロードする必要があります。詳細については、スクリプト センターの FAQ を参照してください。

Active Directory ブラウザは便利そうなので入手したいのですが

この Active Directory ブラウザを欲しがる人がいるとは思っていませんでした。このブラウザは便利で小さく、そのうえとても勉強になります。VBScript や ADSI を使用して、あらゆる Active Directory オブジェクトにアクセスすることができます (さらに、収集した情報を HTA で表示することもできます)。この Active Directory ブラウザを入手したい場合は、 scripter@microsoft.com (英語のみ) まで電子メールでお申し込みください。なお、これは単なるブラウザとしての機能しか持たず、スクリプトの作成機能が追加されていない場合もあります。問い合わせが多い場合は、コードをクリーンアップし、コメントを付けて全世界に配布します。

ADSI Scriptomatic を WMI Scriptomatic と統合した方がよかったのでは?

実は、それに関しては真剣に検討したのですが、最終的に両者を統合しない方がよいと判断しました。これら 2 つの Scriptomatic は、いずれもコンセプトが単純で (1 つの機能に特化している)、使いやすいことを特長としているからです。HTA に関しては、Scriptomatic にはスクリプトの習得に役立つという利点もあります。Scriptomatic をメモ帳で開き、コードを確認できるだけでなく、変更を加えることも可能です。2 つの Scriptomatic を統合すると、今ほど使いやすいツールにはならず、HTA の枠から大きく外れてしまう可能性もあります。大きくて複雑であることは、Scriptomatic の設計理念に一致しないとも考えました。

また、作成中のユーティリティが他にもいくつかあります。そうしたユーティリティが完成するのを待って ADSI Scriptomatic と統合するよりも、ADSI Scriptomatic だけを先にリリースした方がよいと判断しました。他のユーティリティがすべて完成したら、総合的な機能を備えたスクリプト作成ユーティリティを作る可能性もあります。しかし、現在はまだ検討中です。その場合、私たちが今後リリースするツールは、シンプルなスタンドアロン ユーティリティとして使用できるだけでなく、総合的なスクリプト作成ユーティリティのプラグインとしても使用できるようなものになることは確かです。

現在開発中のユーティリティには、次のものがあります。

  • Scriptomatic 2.0   作成したスクリプトをテキスト ファイルまたは Excel スプレッドシートとして保存したり、Web ページに表示したりすることができるほか、Jscript、Perl、および Python でスクリプトを作成することもできます。
  • Comparomatic   各種の Windows (Windows 98、Windows 2000、Windows XP など) が混在する環境の管理者を対象とした簡素で便利な WMI ユーティリティです。
  • Logonomatic   便利なログオン スクリプト作成ツールです。
  • Eventomatic   WMI イベント監視スクリプト作成ツールです。

これらのユーティリティの具体的な完成時期は未定ですが、Scriptomatic 2.0 と Comparomatic は間もなくリリース予定です。

Xbox はこれまでで最高のゲーム機で、家庭の必需品だと思いますか

はい、そう思います。

ADSI Scriptomatic の問い合わせ先は?

ADSI Scriptomatic のサポートは正式には行っていません。自己責任で使用してください。ただし、問い合わせには可能な限り対応するつもりです。ADSI Scriptomatic についてのご意見、ご質問がある場合は、 scripter@microsoft.com (英語のみ) に問い合わせください。