[PowerShell] | |||||||||
PowerShellでレジストリ情報を操作する
|
|||||||||
|
解説 |
いまさらいうまでもなく、レジストリとはWindowsそのもの、あるいは各種アプリケーションの構成情報を格納するための、Windows OS内部のデータベースである。通常のユーザー・インターフェイスからでは設定/変更できないような操作も、レジストリを直接操作すれば可能なことも少なくない。
もっとも、レジストリはシステムの基本的な動作設定を多く含んでいるため、不用意な操作はシステム自体の不具合を招き、最悪の場合、システムが起動できなくなる可能性もある。このため、システム管理者であってもレジストリを直接に操作するのは避けるべきであるし、ましてや、エンド・ユーザーにレジストリを触らせるような状況は、よほどの例外でない限りは避けるべきだろう。
そこで本稿では、PowerShellスクリプトからレジストリの値を取得/更新するための方法を紹介する。システム管理者が十分にテストを実施したスクリプトを介することで、危険なレジストリ操作も安全に、かつ、コマンド1つで実施することが可能になる。
本稿ではInternet Explorerのホームページ(起動時にデフォルトで表示されるページ)を、PowerShellスクリプトから設定するサンプルを紹介する。
操作方法 |
*注意 |
PowerShellを利用するには、あらかじめシステムにユーザー自身がインストールしておく必要があります。具体的なインストール方法については「PowerShellをインストールする」を参照してください。 |
手順1――テキスト・エディタでPowerShellのコードを入力する
まずはテキスト・エディタ(メモ帳でも何でもよい)を開き、以下のコードを入力してほしい。なお「#」で始まる行は、コードの意味を解説するためのコメント部分なので、省略してもよい。コメントには、スクリプトの簡単な説明を入れておいた。
|
|
※ サンプル・ファイル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 |
* PowerShellでスクリプト・ファイルを実行する場合には、あらかじめいくつかの設定を行っておく必要がある。詳細については、「Windows PowerShellコマンド&スクリプティング入門(後編)」を参照していただきたい。 |
上のように表示されれば、スクリプトは正しく動作している。また、レジストリ・エディタから確かに該当のキー値が指定されたURLに変更されていることを確認しておこう。
![]() |
|||||||||
変更されたホームページのURLのレジストリ値 | |||||||||
Registry.ps1実行後のホームページ(Internet Explorerの起動時に表示されるページ)をレジストリ・エディタで確認すると、このように、スクリプト中で指定したものに変更されている。 | |||||||||
|
-whatIfオプションで、操作内容を確認する
さて、最後に、先ほど保留しておいた-whatIfオプションについても補足しておこう。まずは、最初のリストの内容を次のように変更してほしい(行末に「-whatIf」を追加する)。
Set-ItemProperty $path -name "Start Page" -value "http://www.wings.msn.to" |
この状態でRegistry.ps1を実行してみると、次のように、レジストリ値は変更されないことが分かる(「変更後のホームページ」が変更前と同じで、変更されていない)。
PS > ./Registry.ps1 |
-whatIfオプションを指定した場合、このように操作の内容が表示されるのみで、実際の操作(ここではレジストリの変更)は行われない。レジストリの変更やファイルの削除など、元に戻せない(戻しにくい)操作を行う場合には、いきなり実行するのではなく、まず-whatIfオプションを付けてスクリプトを実行することで、処理内容を事前に確認することを強くお勧めする。-wharIfオプションは、Set-ItemPropertyコマンドレットだけではなく、変更を伴うコマンドレットの多くで共通して利用することができる。
この記事と関連性の高い別の記事
- WSHでレジストリの読み書きを行う(TIPS)
- PowerShellでファイルやフォルダーを操作する(TIPS)
- PowerShellを使って指定したファイルをインターネットからダウンロードする(TIPS)
- PowerShellスクリプトへのショートカットを作成する(TIPS)
- NT 4.0のアプリケーション設定情報をWindows 2000に移行させる方法(TIPS)
このリストは、デジタルアドバンテージが開発した自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。

![]() |
「Windows TIPS」 |
- Azure Web Appsの中を「コンソール」や「シェル」でのぞいてみる (2017/7/27)
AzureのWeb Appsはどのような仕組みで動いているのか、オンプレミスのWindows OSと何が違うのか、などをちょっと探訪してみよう - Azure Storage ExplorerでStorageを手軽に操作する (2017/7/24)
エクスプローラのような感覚でAzure Storageにアクセスできる無償ツール「Azure Storage Explorer」。いざというときに使えるよう、事前にセットアップしておこう - Win 10でキーボード配列が誤認識された場合の対処 (2017/7/21)
キーボード配列が異なる言語に誤認識された場合の対処方法を紹介。英語キーボードが日本語配列として認識された場合などは、正しいキー配列に設定し直そう - Azure Web AppsでWordPressをインストールしてみる (2017/7/20)
これまでのIaaSに続き、Azureの大きな特徴といえるPaaSサービス、Azure App Serviceを試してみた! まずはWordPressをインストールしてみる
![]() |
|
|
|
![]() |