
TechNet コラムへようこそ。このコラムでは、よく寄せられるシステム管理スクリプトに関する質問に Scripting Guys がお答えします。システム管理スクリプトについて質問がある場合は、scripter@microsoft.com (英語のみ) までお送りください。すべての質問に回答することはできないかもしれませんが、可能な限り対応いたします。
詳細情報
| • | |
| • | |
| • |
![]()
Scripting Guy さん、よろしくお願いします。新しい WMI 名前空間をルート名前空間に作成する方法はありますか。
-- MT

MT さん、こんにちは。お元気ですか。お元気だとよいのですが。Scripting Guys は、皆さんがお元気であることを願っています (ええ、私たちは、"ほぼすべて" の皆さんがお元気であることを願っています。この原則には、若干の例外があります)。ただし、もしお元気でない場合のため (お元気であることを願っていますが)、ここで、お気に入りのメジャー リーグ球団のカラーとロゴをあしらった骨つぼと棺を入手できることをお知らせしておきます。
確かに、これは、このコラムを執筆している Scripting Guy が通常話題にするような内容ではありません。というのも、彼は、それほど真剣に死について考えていません。普段であれば、このような話題には見向きもしませんが、ある日雑誌をパラパラとめくっているときに、野球の骨つぼの広告を見た場合は例外でした。その広告にはこうありました。「数量には限りがありますので、お急ぎください」と。
"お急ぎください" ですか。正直に言うと、このコラムを執筆している Scripting Guy は、これをどう解釈すべきかわかりませんでした。ボストン レッド ソックスの骨つぼで永遠の時を過ごすには、まだ手に入れられる今のうちに急いで死ななくてはならない、ということでしょうか (なにしろ、ボストン レッド ソックスではなくロサンゼルス ドジャースの骨つぼで永遠の時を過ごさなければならないというリスクを好んで負う人などいないでしょうから)。もちろん、骨つぼをすぐに使う必要はないでしょうし、おそらく、後々のために取っておくことができるでしょう。しかし、今の時代、本当にその賭けに出ることができますか。たとえば、シアトルを本拠地としている NBA チームのスーパー ソニックスは、今にもオクラホマ シティに移転しようとしています。今日出かけていって、ソニックスのロゴを使用した骨つぼを購入しても、結局チームはオクラホマ シティに移転してしまうだけです。どうするでしょうか。本当に、存在しないチームの骨つぼで永遠の時を過ごしたいですか。それは、Scripting Guys が定義するところの天国ではありません。
注 : とは言うものの、この件についてはまだ合意に達していません。しかし、Scripting Guys が定義する天国には、はるかに多くのドーナツがあり、骨つぼに閉じこもることははるかに少ないということは間違いないでしょう。 もちろん、タンパ ベイ デビルズ レイズの骨つぼであれば話は別です。ただし、タンパ ベイの骨つぼは、まだ販売されていません。孤独な無の永遠をタンパ ベイ デビルズ レイズと過ごしたい場合は、彼らの試合を観戦するしかありません。 考えてみると、それも Scripting Guys が定義するところの天国ではありません。 |
さて、あなたの考えはわかっていますよ。「Scripting Guys、それはどうでしょう。だって、"フィラデルフィア" フィリーズの骨つぼですよね。かなり魅力的ですよ。死よりも生を魅力的にできるものがあると言うのですか」と思ってますよね。良い質問ですね。フィラデルフィア フィリーズの骨つぼを超えられるかどうかはわかりません (補足 : Microsoft Word のスペルチェック機能では、"Phillies" (フィリーズ) が有効な単語として認識されません)。ですが、新しい WMI 名前空間をルート名前空間に作成するスクリプトを提供するというのはどうでしょう。
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root")
Set objItem = objWMIService.Get("__Namespace")
Set objNamespace = objItem.SpawnInstance_
objNamespace.Name = "ScriptCenter"
objNamespace.Put_
注 : このスクリプトを Windows Vista で標準の管理者特権を使用して実行すると、次のエラー メッセージが表示されます。 C:\scripts\hey0725.vbs(9, 1) SWbemObjectEx: アクセスが拒否されました このスクリプトを Windows Vista で動作させる必要がある場合は、昇格した特権を使用して実行する必要があります。つまり、コマンド プロンプトからスクリプトを実行する必要があるということです。それには、[コマンド プロンプト] を右クリックし、[管理者として実行] をクリックします。 |
正直なところ、新しい WMI 名前空間をルート名前空間に (さらに言えば、他のどこにも) 作成するという必要に迫られることはないかもしれません。とは言え、これは興味深い質問です。というのも、単に、この処理によって WMI スクリプトがどれほど優れているかが示されるからです。何しろ、WMI 自体を変更するスクリプトを作成することも可能です (ただし、私たちの知る限り、WMI をお気に入りのメジャー リーグ球団のカラーとロゴに合わせることはまだできません)。新しい名前空間の作成は、最も現実的な WMI スクリプトの使用方法ではないかもしれませんが、間違いなく興味深い使用方法です。より現実的かつ一般的な WMI の使用方法については、『Microsoft Windows 2000 Scripting Guide』の「WMI Scripting Primer」(英語) を参照してください。
スクリプトでは、まず、ローカル コンピュータの WMI サービスにバインドします (ただし、いつものように、strComputer 変数にリモート コンピュータの名前を代入するだけで、そのリモート コンピュータに対してこのスクリプトを実行することもできます)。WMI に接続したら Get メソッドを使用して、__Namespace クラスにバインドします (Namespace という単語の前に 2 つのアンダースコアがあることに注意してください)。
Set objItem = objWMIService.Get("__Namespace")
__Namespace クラスには、(この場合) ルート名前空間のすべての名前空間のインスタンス データが含まれます。新しい名前空間を作成する必要があるため、今度は、SpawnInstance_ メソッドを呼び出して、新しい空の名前空間を作成します。
Set objNamespace = objItem.SpawnInstance_
この新しい名前空間には (少なくとも) 名前が必要であるため、ScriptCenter という値を Name プロパティに代入します。
objNamespace.Name = "ScriptCenter"
さて、これで完了でしょうか。ほぼ完了です。後は、Put_ メソッドを呼び出して、新しい名前空間 (root\ScriptCenter) を WMI リポジトリに書き込むだけです。
objNamespace.Put_
これで完了です。
つまり、比喩的に言うと完了です。
もちろん、あなたの考えはわかっています。「もし気が変わって、その新しい名前空間を削除することにしたらどうなるでしょう。できるのでしょうか。それとも、シアトル スーパー ソニックスの骨つぼで我慢するのと同じように、この名前空間を削除できないまま我慢することになるのでしょうか」と考えていますね。慌てないでください。名前空間 root\ScriptCenter を削除するのに必要な作業は、次のスクリプトを実行するだけです。
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root")
Set objItem = objWMIService.Get("__Namespace.Name='ScriptCenter'")
objItem.Delete_
注 : 言うまでもなく、上記のスクリプトを実行するときには、注意する必要があります。ScriptCenter という名前のカスタム名前空間を作成してから削除する場合には、問題ありません。しかし、同じ方法を使用して、WMI の組み込みの名前空間を削除すると、自ら災難を招くことになります。 |
この 2 つ目のスクリプトでは、再度、WMI サービスにバインドします。ただし今回は、次のコード行を使用して、root\ScriptCenter 名前空間に直接バインドします。
Set objItem = objWMIService.Get("__Namespace.Name='ScriptCenter'")
ご覧のとおり、単純に、Name プロパティの値が ScriptCenter の __Namespace クラスのインスタンスに接続しています。接続を確立したら、Delete_ メソッドを呼び出して、名前空間を WMI リポジトリから削除できます。
objItem.Delete_
簡単かつ迅速ですね。
先ほどお話したように、忠実なる読者の皆さん (どちらでもありません) が今、骨つぼを必要としているといいのですが (いいえ、お気に入りの球団のチーム カラーとロゴを使用した骨つぼでもありません)。ただし、本当に骨つぼが必要な場合、現時点で入手できる骨つぼは、次の球団だけであることに注意してください。
| • | セントルイス カーディナルス |
| • | アトランタ ブレーブス |
| • | ボストン レッド ソックス |
| • | シカゴ カブス |
| • | デトロイト タイガース |
| • | ロサンゼルス ドジャース |
| • | ニューヨーク ヤンキース |
| • | フィラデルフィア フィリーズ |
最終的な決断はあなた次第ですが、Scripting Guys は、シカゴ カブスの骨つぼをお勧めします。というのも、その象徴的な表現がとても良いからです。あなたはシカゴ カブスの骨つぼで永遠の時を過ごし、カブスは次のワールド シリーズで優勝するためにそれと同じ時間を費やすでしょう。