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

PI さん、こんにちは。少しお待ちください。今日のコラムに取り掛かる前に確認しますが、今日のコラムを読んでいる方の中にマイクロソフトの方はいらっしゃいますか。恥ずかしがらずに、マイクロソフトの方は手を挙げてください。いませんか。マイクロソフトの従業員はだれ一人として今日のコラムを読んでいないのですね。すばらしいことです。
マイクロソフトの人間が今日のコラムを読んでいたら、どうだと言うのかというと、よく考えてみると、このコラムを執筆している Scripting Guy は、このぞっとするような真相を同僚には知られたくありません。というのも、このコラムを執筆している Scripting Guy は Internet Explorer 7 を使用していないのです。そうです。彼はまだ Internet Explorer 6 を使っています。その理由はというと、特にありません。単に Internet Explorer 6 の方が好きなだけです。
繰り返しますが、これはここだけの話ですよ (それでも、まだいい方かもしれません。Firefox などのマイクロソフト以外のブラウザを使用するという選択肢もありますから)。
とにかく、このコラムを執筆している Scripting Guy は、まだ Internet Explorer 6 を使用しているので (それに、フォードのモデル T を運転したり、蓄音機で音楽を聴いたりしているので)、複数のホーム ページを使用するように Internet Explorer 7 を設定できることさえ知りませんでした。しかし、とにかく、この設定は可能です。複数のタブがあるということは、一度に複数のページを開けるということなので、これは当然のことです。それでは、Internet Explorer を起動するたびに、複数のホーム ページが個別のタブに自動的に読み込まれるようにしてみましょう。
何よりも、Internet Explorer 7 で複数のホーム ページを設定するスクリプトを作成する作業は、次のように簡単です。
Const HKEY_CURRENT_USER = &H80000001
strComputer = "."
Set objReg = GetObject("winmgmts:\\" & strComputer & "\root\default:StdRegProv")
strKeyPath = "SOFTWARE\Microsoft\Internet Explorer\Main"
ValueName = "Start Page"
strValue = "http://www.microsoft.com/technet/scriptcenter/default.mspx"
objReg.SetStringValue HKEY_CURRENT_USER, strKeyPath, ValueName, strValue
ValueName = "Secondary Start Pages"
strValue1 = "http://www.microsoft.com/technet/scriptcenter/resources/qanda/default.mspx"
strValue2 = "http://www.microsoft.com/technet/scriptcenter/resources/begin/default.mspx"
arrValues = Array(strValue1, strValue2)
objReg.SetMultiStringValue HKEY_CURRENT_USER, strKeyPath, ValueName, arrValues
コードから解読されている方もいらっしゃると思いますが、Internet Explorer 7 で複数のホーム ページを設定するには、レジストリを変更する必要があります。具体的には、次の 2 つのレジストリ値を変更する必要があります。
| • | HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\Start Page: ここでは、プライマリ ホーム ページを設定します (プライマリ ホーム ページは、Internet Explorer の最上位のタブに表示されるページです)。このレジストリの場所に見覚えがあるかもしれませんが、当然です。というのも、これは、Internet Explorer の以前のバージョンでホーム ページを設定する際に使用されていたレジストリ値と同じだからです。 |
| • | HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\Secondary Start Pages: これは新しいレジストリ値で、プライマリ以外のホーム ページを設定する場所です (Internet Explorer 7 では、このようなページを "セカンダリ ホーム ページ" と呼んでいます)。このレジストリ値は既定では存在しません。存在する場合は、既に複数のホーム ページが設定されていることになります。でも心配しないでください。この新しいレジストリ値の作成は、皆さんが考えている以上に簡単です (もちろん、皆さんがこの作業を難しいと少しも思っていない場合は別ですが)。 |
では、処理内容の説明についてはこれくらいにして、処理方法について説明しましょう。まず、HKEY_CURRENT_USER という名前の定数を定義し、この定数に値 &H80000001 を代入します。この定数を使用して、操作するレジストリ ハイブをスクリプトに指示します (そうですね。Internet Explorer のホーム ページはユーザーごとに設定されているので、ここでは、HKEY_CURRENT_USER ハイブを操作します)。次に、ローカル コンピュータの WMI サービスに接続して、StdRegProv クラスにバインドします。このクラスは、ここで操作するほとんどの WMI クラスとは異なり、root\default 名前空間にあります。
strComputer = "."
Set objReg = GetObject("winmgmts:\\" & strComputer & "\root\default:StdRegProv")
注 : このスクリプトはリモート コンピュータに対して実行することができるか、ですって。もちろんできます。もしできなかったら、何が楽しいのでしょうか。リモート コンピュータで複数のホーム ページを設定する場合に必要な作業は、次のようにリモート コンピュータの名前を strComputer 変数に代入するだけです。 strComputer = "atl-ws-01" |
WMI サービスに接続したら、次の 3 つの変数に値を代入します。
| • | strKeyPath: 変更するレジストリ値の (HKEY_CURRENT_USER ハイブ内の) パスです。この場合は、SOFTWARE\Microsoft\Internet Explorer\Main です。 |
| • | ValueName: 変更するレジストリ値の名前です。このスクリプトでは、Start Page です。 |
| • | strValue: プライマリ ホーム ページとして代入する値です。言うまでもなく、ここでは、親切で良識のある人がホーム ページとして使用しているページ "http://www.microsoft.com/japan/technet/scriptcenter/default.mspx" を選びました。 |
では、実際には、どうやって Script Center のホーム ページを Internet Explorer のホーム ページとして設定するのか、ですって。これには、次のコードを使用します。
objReg.SetStringValue HKEY_CURRENT_USER, strKeyPath, ValueName, strValue
ご覧のとおり、ここでは、SetStringValue メソッドを呼び出して、メソッドのパラメータとしてレジストリ ハイブ (定数 HKEY_CURRENT_USER)、レジストリ パス (strKeyPath)、レジストリ値の名前 (ValueName)、および新しいホーム ページ (strValue) を渡しているだけです。
簡単でしたね。では、セカンダリ ホーム ページの処理に移りましょう。
既に説明したように、セカンダリ ホーム ページの URL は、すべて Secondary Start Pages という名前のレジストリ値に格納されます。つまり、まず、ValueName 変数の値を変更する必要があります。
ValueName = "Secondary Start Pages"
注 : strKeyPath 変数の値を変更しないのには理由があります。変更する必要がないからです。というのも、Secondary Start Pages レジストリ値は、レジストリ キー SOFTWARE\Microsoft\Internet Explorer\Main にも存在するからです。 |
ここでは、ほんの少し注意する必要があります (ただし、ほんの少しだけです)。Secondary Start Pages レジストリ値のデータ型は REG_MULTI_SZ である必要があります。これは、このキーが (必要に応じて) 複数の値を保持できる必要があるためです。さいわい、これはたいしたことではありません。つまり、このレジストリ キーに代入する値は配列として渡す必要があるというだけのことです。この処理を行うのが次のコード ブロックです。
strValue1 = "http://www.microsoft.com/technet/scriptcenter/resources/qanda/default.mspx" strValue2 = "http://www.microsoft.com/technet/scriptcenter/resources/begin/default.mspx" arrValues = Array(strValue1, strValue2)
コードの最初の行では、strValue1 という名前の変数に Hey, Scripting Guy! のコラムの URL を代入します。その理由は、Hey, Scripting Guy! をセカンダリ ホーム ページの 1 つに指定するためです。2 行目では、strValue2 という名前の変数に Sesame Script コラムの URL を代入します。その理由は、ああ、そうでした。皆さんなら、これについて説明する必要はありませんよね。
注 : 3 つ以上のセカンダリ ホーム ページを作成することはできるのでしょうか。もちろんできますが、正直なところ、上限はわかりませんし、上限があるかどうかもよくわかりません。 |
では、3 行目に移りましょう。ここでは、VBScript の Array 関数を呼び出して、arrValues という名前の配列に 2 つの変数 (strValue1 と strValue2) を追加します。
これが完了したら、SetMultiStringValue メソッドを呼び出して、この 2 つの URL を Secondary Start Pages レジストリ値に代入する準備が整います。次に、この処理を行うコード行を示します。
objReg.SetMultiStringValue HKEY_CURRENT_USER, strKeyPath, ValueName, arrValues
何ですって。既定では Secondary Start Pages レジストリ値が存在しないと言ったじゃないか、ですって。いや、確かに言いました。ですが、既にお話したように、たいしたことではありません。このレジストリ値が存在する場合、SetMultiStringValue メソッドにより、そのレジストリ値が上書きされるだけです。このレジストリ値が存在しない場合、SetMultiStringValue メソッドでは、このレジストリ値を作成してから、このレジストリ値に新しい値を代入します。どちらに転んでも成功するとはまさにこのことですね。
PI さん、いずれにしても、これでうまくいくはずです。私たちは、今日のコラムによって Internet Explorer 7 の操作に関する質問がさらに出て来ることを確信しています。たとえば、このセカンダリ ホーム ページを削除する方法や、セカンダリ ホーム ページの 1 つを (他のページをそのままにした状態で) 削除する方法を知りたいと思っている方もいることでしょう。このような質問のいくつかについては、(今日ではありませんが) 近いうちにお答えします。でも、大丈夫です。だって、皆さんは複数のホーム ページを割り当てるスクリプトを試す時間が必要ですから。それに、このコラムを執筆している Scripting Guy も、実際に Internet Explorer 7 をインストールして使用してみるのに少し時間が必要です。
そうはいっても、だれかから聞かれたら、彼はこれまでも Internet Explorer 7を使用してきました、と答えるつもりです。