Set-ItemPropertyの使い方:プロパティやレジストリ値を変更する
Set-ItemProperty コマンドレットを使用すると、ファイルやディレクトリ、レジストリキーに設定されているプロパティや値を変更することができます。特にレジストリ値を変更する際によく使用されるコマンドレットです。ここでは PowerShell における Set-ItemProperty コマンドレットの使い方について解説します。
Set-ItemPropertyコマンドレットの書式
Set-ItemProperty コマンドレットは、ファイルやディレクトリ、レジストリキーに設定されているプロパティや値を変更するためのコマンドレットです。 Set-ItemProperty コマンドレットの書式は次の通りです。
Set-ItemProperty [-Path] <string[]> [-Name] <string> [-Value] <Object> [-PassThru] [-Force] [-Filter <string>] [-Include <string[]>] [-Exclude <string[]>] [-Credential <pscredential>] [-WhatIf] [-Confirm] [<CommonParameters>]
Set-ItemProperty はエイリアスとして sp が定義されています。
sp -> Set-ItemProperty
Set-ItemProperty を使ってプロパティを変更するには次の書式を使用します。
Set-ItemProperty -Path 対象のパス -Name プロパティ名 -Value 値
対象のパスには、ファイルやディレクトリのパス、またはレジストリキーを指定します。
-Path は省略可能なので、通常は次のように実行します。
Set-ItemProperty 対象のパス -Name プロパティ名 -Value 値
それでは、実際に試してみます。例としてファイルの「読み取り専用」プロパティを True に設定します。設定する前に、現在のファイルの属性の値を確認してみます。
Get-ItemProperty c:\tmp\file\memo.txt
現在の属性を確認すると、アーカイブ属性のみが有効で、読み取り専用は無効になっています。
設定を行います。次のように実行してください。($true は PowerShell で True を表す特別な変数です)。
Set-ItemProperty c:\tmp\file\memo.txt -Name IsReadOnly -Value $true
画面上には何も表示されません(既定では結果を出力しません)が、対象のファイルの指定したプロパティの値は変更されています。
改めて該当のファイルの属性を確認してみると、「読み取り専用」が有効になっていることが確認できます。
今度は該当ファイルの更新日時を現在の日時に変更してみます。設定する前に、現在の更新日時の値を確認してみます。
設定を行います。次のように実行してください。 Get-Date は現在の日付と時刻を取得するコマンドレットです。
Set-ItemProperty c:\tmp\file\memo.txt -Name LastWriteTime -Value (Get-Date)
画面上には何も表示されません(既定では結果を出力しません)が、対象のファイルの指定したプロパティの値は変更されています。
改めて該当のファイルの更新日時を確認してみると、現在の時刻に変更されていることが確認できます。
このように、Set-ItemProperty を使用すると、ファイルやディレクトリの属性や日時などのプロパティを簡単に変更することができます。
レジストリ値を変更する
Set-ItemProperty を使用すると、ファイルやディレクトリのプロパティと同じように、レジストリキーの値を変更することができます。
-Path にレジストリキー、 -Name にレジストリ値の名前、 -Value に設定するレジストリ値の値を指定します。
Set-ItemProperty レジストリキー -Name レジストリ値の名前 -Value レジストリ値の値
それでは HKCU:\Software\MyApp の Version の値を変更してみます。レジストリエディターで現在設定されているレジストリ値を確認すると次のようになっています。
設定を行います。次のように実行してください。
Set-ItemProperty HKCU:\Software\MyApp -Name Version -Value 5.0
画面上には何も表示されません(既定では結果を出力しません)が、指定したレジストリ値は変更されています。
あらためてレジストリ値を確認すると、値が変更されていることが確認できます。
なお、指定したレジストリ値の名前が存在しなかった場合は、新しいレジストリ値が作成されます。
レジストリキーが存在しない場合
Set-ItemProperty の -Path で指定したレジストリキーが存在していなかった場合、エラーとなります。
それでは例として存在しないレジストリキー HKCU:\Software\MyApp\Data のレジストリ値を変更してみます。次のように実行してください。
Set-ItemProperty HKCU:\Software\MyApp\Data -Name User -Value Yamada
すると次のようなエラーが表示されました。
PS C:\code\powershell> Set-ItemProperty HKCU:\Software\MyApp\Data -Name User -Value Yamada
Set-ItemProperty: Cannot find path 'HKCU:\Software\MyApp\Data' because it does not exist.
もし対象のレジストリキーが存在しなかった場合は、新規にレジストリキーを作成した上でレジストリ値の設定を行うには、 PowerShell スクリプトで次のように実行してください。
$path = "HKCU:\Software\MyApp\Data"
if (!(Test-Path $path)) {
New-Item -Path $path -Force
}
Set-ItemProperty $path -Name User -Value Yamada
Test-Path でレジストリキーの存在を確認し、存在しない場合は New-Item で作成してから設定を行います。
今回は指定したレジストリキーが存在しなかったので、新しく作成されて、レジストリ値が新しく設定されました。
レジストリエディターで確認すると、レジストリキーが作成され、レジストリ値が設定されているのが確認できます。
このように、Set-ItemProperty を使用すると、レジストリ値を簡単に変更することができます。
書き込む前に確認する
Set-ItemProperty を使用すると、確認なしでプロパティやレジストリ値が上書きされます。変更内容によっては元の状態に戻すのが難しくなる場合があるため、注意が必要です。特にレジストリ値は間違った値を設定すると、大きな影響があります。
-Confirm オプションを使用すると、処理を実行する前に確認メッセージが表示されます。
Set-ItemProperty 対象のパス -Name プロパティ名 -Value 値 -Confirm
それでは実際に試してみます。次のように実行してください。
Set-ItemProperty HKCU:\Software\MyApp -Name Version -Value 6.1 -Confirm
次のような確認メッセージが表示されます。
PS C:\code\powershell> Set-ItemProperty HKCU:\Software\MyApp -Name Version -Value 6.1 -Confirm Confirm Are you sure you want to perform this action? Performing the operation "Set Property" on target "Item: HKEY_CURRENT_USER\Software\MyApp Property: Version". [Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "Y"):
Set Property を行うかどうかの確認です。行う場合は Y 、行わない場合は N を押してから Enter キーを押してください。
今回は Y を押してから Enter キーを押しました。
指定したレジストリ値が変更されました。
このように -Confirm を使用することで、大事な値を変更する場合に事前に確認を行うことができます。
-- --
PowerShell における Set-ItemProperty コマンドレットの使い方について解説しました。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。