Windows TIPS
[PowerShell]
  Windows TIPS TOPへ
Windows TIPS全リストへ
内容別分類一覧へ

PowerShellでレジストリ情報を操作する

解説をスキップして操作方法を読む

山田 祥寛
2008/05/30
対象ソフトウェア
Windows PowerShell
レジストリに直接アクセスすることで、通常のユーザー・インターフェイスからでは参照/設定できないような情報も取得/操作できる。
レジストリをエンド・ユーザーが直接操作するのは何かと危険が伴うが、PowerShellスクリプトを介することで安全なレジストリ設定をコマンド1つで行うことが可能になる。

解説

 いまさらいうまでもなく、レジストリとはWindowsそのもの、あるいは各種アプリケーションの構成情報を格納するための、Windows OS内部のデータベースである。通常のユーザー・インターフェイスからでは設定/変更できないような操作も、レジストリを直接操作すれば可能なことも少なくない。

 もっとも、レジストリはシステムの基本的な動作設定を多く含んでいるため、不用意な操作はシステム自体の不具合を招き、最悪の場合、システムが起動できなくなる可能性もある。このため、システム管理者であってもレジストリを直接に操作するのは避けるべきであるし、ましてや、エンド・ユーザーにレジストリを触らせるような状況は、よほどの例外でない限りは避けるべきだろう。

 そこで本稿では、PowerShellスクリプトからレジストリの値を取得/更新するための方法を紹介する。システム管理者が十分にテストを実施したスクリプトを介することで、危険なレジストリ操作も安全に、かつ、コマンド1つで実施することが可能になる。

 本稿ではInternet Explorerのホームページ(起動時にデフォルトで表示されるページ)を、PowerShellスクリプトから設定するサンプルを紹介する。

操作方法

 *注意
PowerShellを利用するには、あらかじめシステムにユーザー自身がインストールしておく必要があります。具体的なインストール方法については「PowerShellをインストールする」を参照してください。

手順1――テキスト・エディタでPowerShellのコードを入力する

 まずはテキスト・エディタ(メモ帳でも何でもよい)を開き、以下のコードを入力してほしい。なお「#」で始まる行は、コードの意味を解説するためのコメント部分なので、省略してもよい。コメントには、スクリプトの簡単な説明を入れておいた。

※ファイル:Registry.ps1

# 操作対象となるレジストリのパス
$path = "HKCU:\Software\Microsoft\Internet Explorer\Main"
# レジストリ・エントリのプロパティを取得し、そのStart Pageキーにアクセスする
$item = Get-ItemProperty $path
"元のホームページ -> " + $item."Start Page"
# 指定されたキーの値を変更する
Set-ItemProperty $path -name "Start Page" -value "http://www.wings.msn.to"
# 変更後のキー値を確認する
"変更後のホームページ -> " + (Get-ItemProperty $path)."Start Page"
サンプル・ファイルRegistry.ps1をダウンロードするには、ここをクリックしてください。

 PowerShellスクリプトの実行ファイルは拡張子を「.ps1」とする必要がある。ファイル名自体は何でも構わないが、ここでは「Registry.ps1」という名前で保存しておこう。

 コード全体の流れについてはリスト内のコメントをご覧いただくとして、ここで注目してほしいのは次の2点だ。

1.レジストリ・エントリを取得するのはGet-ItemPropertyコマンドレット
  レジストリ・エントリを取得するには、まずGet-ItemPropertyコマンドレットでプロパティ情報を取得する。ここでは、まずレジストリ・キー「HKCU:\Software\Microsoft\Internet Explorer\Main」が持つプロパティ(エントリ)群をGet-ItemPropertyコマンドレットで取得し、「$item."Start Page"」で個別のエントリ値にアクセスしている。プロパティ名に空白が含まれる場合には、名前はダブル・クオーテーションでくくる必要がある(*)。

 また「HKCU:\」というパス表記にも注目してほしい。PowerShellではレジストリもドライブの1つとして管理されており、ファイル・システムに対するのと同じ要領でアクセスできるのが特徴だ。「HKCU:\」はレジストリのHKEY_CURRENT_USERを表す。ドライブに関する詳細は「Windows PowerShellコマンド&スクリプティング入門(前編)」でも紹介しているので、併せて参照いただきたい。

* 最初の例ではいったん変数$itemにGet-ItemPropertyコマンドレットの結果を格納しているが、後の例のように「(Get-ItemProperty $path)."Start Page"」と1文で書いても意味は同様である。

2.レジストリ・エントリを設定するのはSet-ItemPropertyコマンドレット
  レジストリ・エントリの値を設定するには、Set-ItemPropertyコマンドレットを使用する。Set-ItemPropertyコマンドレットの一般的な構文は、以下のとおりである。

Set-ItemProperty パス名 -name エントリ名 -value エントリ値

 このように、ごく単純なコードでレジストリを編集できるが、前述したように、レジストリの変更は大きな危険を伴う操作だ。システム管理者といえども、軽々しく実行するべきではない。そこでPowerShellでは、(実際の操作は行わず)操作内容を確認するだけの-whatIfというオプションも用意されている。-whatIfオプションについては、以下で実行の手順と併せてあらためて後述する。

手順2――PowerShellのスクリプト・コードを実行する

 Registry.ps1を実行するには、PowerShellのプロンプトを開いたうえで、以下のようにコマンドを実行すればよい(カレント・フォルダにスクリプトが保存されているものとする*)。

PS > ./Registry.ps1
元のホームページ -> http://jp.msn.com/
変更後のホームページ -> http://www.wings.msn.to

* PowerShellでスクリプト・ファイルを実行する場合には、あらかじめいくつかの設定を行っておく必要がある。詳細については、「Windows PowerShellコマンド&スクリプティング入門(後編)」を参照していただきたい。

 上のように表示されれば、スクリプトは正しく動作している。また、レジストリ・エディタから確かに該当のキー値が指定されたURLに変更されていることを確認しておこう。

変更されたホームページのURLのレジストリ値
Registry.ps1実行後のホームページ(Internet Explorerの起動時に表示されるページ)をレジストリ・エディタで確認すると、このように、スクリプト中で指定したものに変更されている。
変更対象のレジストリ・キー。
変更された値。
変更された内容。

-whatIfオプションで、操作内容を確認する

 さて、最後に、先ほど保留しておいた-whatIfオプションについても補足しておこう。まずは、最初のリストの内容を次のように変更してほしい(行末に「-whatIf」を追加する)。

Set-ItemProperty $path -name "Start Page" -value "http://www.wings.msn.to"
 
Set-ItemProperty $path -name "Start Page" -value "http://www.wings.msn.to" -whatIf

 この状態でRegistry.ps1を実行してみると、次のように、レジストリ値は変更されないことが分かる(「変更後のホームページ」が変更前と同じで、変更されていない)。

PS > ./Registry.ps1
元のホームページ -> http://jp.msn.com/
WhatIf: 対象 "項目: HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main プロパティ: Start Page" に対して操作 "プロパティの設定" を実行しています。
変更後のホームページ -> http://jp.msn.com/

 -whatIfオプションを指定した場合、このように操作の内容が表示されるのみで、実際の操作(ここではレジストリの変更)は行われない。レジストリの変更やファイルの削除など、元に戻せない(戻しにくい)操作を行う場合には、いきなり実行するのではなく、まず-whatIfオプションを付けてスクリプトを実行することで、処理内容を事前に確認することを強くお勧めする。-wharIfオプションは、Set-ItemPropertyコマンドレットだけではなく、変更を伴うコマンドレットの多くで共通して利用することができる。End of Article

「Windows TIPS」


Windows Server Insider フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)
- PR -

注目のテーマ

Windows Server Insider 記事ランキング

本日 月間
ソリューションFLASH