PowerShellを使用してレジストリ値を読み取る方法

2021年6月24日 14116 ビュー PowerShellを使用してレジストリ値を読み取る方法

このSゾーンでは、VictorがPowerShellを使用してレジストリ値を読み取る方法を説明します。





このガイドは、PowerShellで使用するレジストリパスをフォーマットする方法を説明することから始まります。また、PowerShellで使用するレジストリキーをコピーするための最良の方法についても学習します。



管理者としてファイルエクスプローラーを開く方法

最後に、このガイドでは、PowerShellを使用してレジストリ値を読み取るさまざまな方法を含む10の例を示しています。

ガイドにはさまざまなトピックと例があります。特定のトピックまたは例を読みたい場合は、下の[投稿トピックの参照]を展開して、トピックをクリックしてください。



投稿トピックを閲覧する



PowerShellのレジストリパスをフォーマットする方法

PowerShellを使用してレジストリ値を読み取る方法-PowerShellのレジストリパスをフォーマットする方法

PowerShellを使用してレジストリ値を読み取る方法を説明する前に、PowerShellで機能するようにレジストリパスをフォーマットする方法を説明します。

Windowsレジストリには5つのトップレベルキー(ルートキー)があります。



  1. HKEY_LOCAL_MACHINE
  2. HKEY_CURRENT_CONFIG
  3. HKEY_CLASSES_ROOT
  4. HKEY_USERS
  5. HKEY_CURRENT_USER

レジストリ値を読み取るには、キーをパスとして指定します。 Get-ItemProperty また Get-Item コマンドレット。レジストリパスをフォーマットするには、次の2つの方法があります。



完全なレジストリキーパスを使用したフォーマット

入力 レジストリ:: レジストリへのフルパスが続きます。たとえば、 HKEY_LOCAL_MACHINE SOFTWARE Microsoft Windows CurrentVersion 、 私が使用します Registry :: HKEY_LOCAL_MACHINE SOFTWARE Microsoft Windows CurrentVersion

省略されたレジストリキーパスを使用したフォーマット

トップレベルのレジストリキー(ルートキー)の省略形、コロン(:)、レジストリキーへのフルパス(ルート名なし)を入力することもできます。

注意として、ルートキーの略語は次のとおりです。

HKEY_LOCAL_MACHINE – HKLM
HKEY_CURRENT_CONFIG – HKCC
HKEY_CLASSES_ROOT – HKCR
HKEY_USERS – HKU
HKEY_CURRENT_USER – HKCU

したがって、レジストリパスを指定するには、 HKEY_LOCAL_MACHINE SOFTWARE Microsoft Windows CurrentVersion この2番目の方法では、次のように記述されます– HKLM: SOFTWARE Microsoft Windows CurrentVersion

ルート名が削除されても、最初のスラッシュ()は保持されていることに注意してください。

レジストリキー名をコピーする方法

先に進む前にもう1つ、手動で入力するのではなく、PowerShellで読み取りたいレジストリキーへのパスをコピーすることをお勧めします。

レジストリキーをコピーするには、キーを右クリックして[ キー名をコピーする 。これが例です。

PowerShellを使用してレジストリ値を読み取る方法-PowerShellのレジストリパスをフォーマットする方法

PowerShellを使用してレジストリ値を読み取る:例

PowerShellを使用してレジストリ値を読み取る:例

PowerShellで使用するレジストリパスをフォーマットする方法がわかったので、このセクションでは、PowerShellを使用してレジストリ値を読み取るための10の例を紹介します。

レジストリキーのすべての値を返す方法

レジストリキーのすべての値を返すには、以下のコマンドを入力してEnterキーを押します。

Get-ItemProperty -Path HKLM:SOFTWAREMicrosoftWindowsCurrentVersion
パスを、値を読み取るレジストリキーのパスに変更します。前のセクションのレジストリのフォーマットを覚えておいてください。

このコマンドは、指定されたパスのすべての値を返します。以下の2番目のスクリーンショットは、実際のレジストリエントリです。

PowerShellの結果とレジストリ値(2番目のペイン)を比較すると、まったく同じです。

レジストリキーに特定の値を返し、それを変数に保存する方法

前のセクションに続いて、そのセクションのコマンドは、指定されたレジストリパスのすべての値を返しました。ただし、PowerShellを使用してレジストリ値を読み取り、特定の値を返すこともできます。

これを行うには複数の方法があります。

最後のコマンド( Get-ItemProperty コマンド)は、以下のスクリーンショットに示されている値を返しました。

この画像には空のalt属性があります。そのファイル名はimage-74-1024x591.pngです。

値を返すには CommonFilesDir 、以下のコマンドのいずれかを使用します。

(Get-ItemProperty -Path HKLM:SOFTWAREMicrosoftWindowsCurrentVersion).CommonFilesDir
Get-ItemProperty -Path HKLM:SOFTWAREMicrosoftWindowsCurrentVersion | Select-Object -ExpandProperty CommonFilesDir

2つのコマンドは、レジストリデータを返します。 それなし プロパティ名、 CommonFilesDir 。以下のスクリーンショットを参照してください。

最後に、このサブセクションでは、PowerShellを使用してレジストリ値を読み取り、その値を変数に保存できます。たとえば、最後のコマンドのレジストリデータを次の変数に保存できます。 $ RegData 。

変更されたコマンドは次のとおりです。

$RegData = Get-ItemProperty -Path HKLM:SOFTWAREMicrosoftWindowsCurrentVersion | Select-Object -ExpandProperty CommonFilesDir

これで、コマンドを実行すると、結果が変数に保存されるため、コンソールに結果が返されません…

レジストリキーに特定の値を返し、それを変数に保存する方法

ただし、変数に保存された結果を表示するには、変数を実行します…

$RegData

これがPowerShellでの結果です…

レジストリサブキー名を返す方法

最後の最後のサブセクションの最後のコマンドは、レジストリキーの名前とそのデータの両方を返しました。

ただし、データなしで名前を表示したい場合があります。あなたは使用することができます Get-Item これを行うためのコマンドレット。以下のコマンドを参照してください…

Get-Item -Path Registry::HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersion | Select-Object -ExpandProperty Property

このコマンドは、付随するデータ列なしでレジストリキーの名前を返します。

PowerShellを使用してレジストリ値を読み取り、バイナリデータを返す方法

この例では、レジストリキーにバイナリ値を表示します。 CaptionFont 。このキーは、このレジストリパスHKEY_CURRENT_USER Control Panel Desktop WindowMetricsにあります。

PowerShellを使用してレジストリ値を読み取り、バイナリデータを返す方法

最初のステップは、のプロパティを返すことです CaptionFont 鍵。ただし、その前に、のすべてのプロパティを一覧表示しましょう。 HKEY_CURRENT_USER コントロールパネルデスクトップ WindowMetrics 。

$key = Get-Item 'Registry::HKEY_CURRENT_USERControl PanelDesktopWindowMetrics'

このコマンドは、次のような一連のプロパティを返します。 CaptionFont 。

プロパティだけを返すには、上記のコマンドをSelect-Objectにパイプします…

Get-Item 'Registry::HKEY_CURRENT_USERControl PanelDesktopWindowMetrics' | Select-Object -ExpandProperty Property

このコマンドは、リスト内のすべてのプロパティを表示します。

PowerShellを使用してレジストリ値を読み取り、バイナリデータを返す方法

CaptionFont(配列の4番目の値)を表示するには、以下に示すようにコマンドを更新し、変数に保存します…

$name = (Get-Item 'Registry::HKEY_CURRENT_USERControl PanelDesktopWindowMetrics' | Select-Object -ExpandProperty Property)[3]

次に、レジストリ値のタイプ(この場合はREG_BINARY)を表示するには、 GetValueKind に保存された元のコマンドのメソッド $ key 変数。次に、 CaptionFont (に保存 $ nam e)メソッドの値として。

これがコマンドです…

$Type = $key.GetValueKind($name)

結果は、予想どおり、バイナリです。

次に、以下のPowerShellコマンドを使用してバイナリレジストリタイプの値を読み取ります…

$Value = $key.GetValue($name)

コマンドからわかるように、値はを呼び出すことによって再試行されます GetValue に保存された元のキーのメソッド $ key 変数。次に、プロパティの名前を使用して、 CaptionFont メソッドで。

結果はたくさんの数字です。レジストリでこの値を確認するには、以下のスクリーンショットを参照してください。

PowerShellを使用してレジストリ値を読み取り、バイナリデータを返す方法

最後に、レジストリ値を簡単に一覧表示できるようにするために、Get-RegistryDataというPowerShell関数を作成しました。関数をダウンロードするには、Get-RegistryData.zipのダウンロードをクリックします

ダウンロードしたら、ファイルを解凍します。次に、以下のコマンドを実行します。

Unblock-File C:UsersVictorADownloadsGet-RegistryDataGet-RegistryDataGet-RegistryData.ps1 Import-Module C:UsersVictorADownloadsGet-RegistryDataGet-RegistryDataGet-RegistryData.ps1
C: Users VictorA Downloads Get-RegistryData Get-RegistryData をコンピューター上の関数へのパスに置き換えます。

レジストリパスのキーの値またはデータを取得するには、次のコマンドを実行します。

Get-RegistryData -RegistryPath 'HKEY_CURRENT_USERSOFTWAREMicrosoftWindowsCurrentVersionExplorer'

このコマンドは、キーの名前、レジストリパス、およびキーのタイプを表示します。 [タイプ]列は、下のスクリーンショットでは非表示になっています。

または、特定のヘッダーを表示したくない場合は、Get-RegistryDataをSelect-Objectにパイプできます。

Get-RegistryData -RegistryPath 'HKEY_CURRENT_USERSOFTWAREMicrosoftWindowsCurrentVersionExplorer' | Select-Object name, type, data

上記のコマンドを使用すると、Get-RegistryDataは 名前 、 タイプ 、 と データ 指定されたレジストリパスの各キーの…

Get-RegistryData関数には、と呼ばれる単一のパラメーターがあります RegistryPath

PowerShellを使用してレジストリ値を読み取り、配列を返す方法

PowerShellでレジストリキーを読み取り、配列の値を返すには、 Get-ChildItem 指図。

このレジストリキー、 HKEY_CURRENT_USER コントロールパネルデスクトップ 3つのサブキーがあります。以下のコマンドは、すべてのサブキー、それらのプロパティ、および値を返します。

$subkeys = Get-ChildItem 'registry::HKEY_CURRENT_USERControl PanelDesktop'

これらの値は配列で返されます。確認するには、以下のコマンドを実行します…

$subkeys.GetType()

このコマンドは、$ subkeys変数に保存されている最後のコマンドのデータ型が配列であることを確認します。

PowerShellを使用してレジストリ値を読み取り、配列を返す方法のために Get-ChildItem 結果を配列で返すコマンドの場合、レジストリキーにはサブキーが必要です。

PowerShellを使用してレジストリ値が存在する場合にそれを取得する方法

このサブセクションの例は、マイナーな例外を除いて、このガイドの他のすべての例と同様です。ここでのわずかな変更は、Test-Pathを使用してパスが存在するかどうかを確認することです。

次に、パスが存在する場合は、PowerShellでその値を取得します。この単純なスクリプトは、レジストリパスHKEY_CURRENT_USER Control Panel Desktopが存在するかどうかを確認します。

音声文字変換ソフトウェアmac

次に、存在する場合は、Get-ItemPropertyコマンドを使用してその値を読み取ります。

If (Test-Path 'Registry::HKEY_CURRENT_USERControl PanelDesktop') { Get-ItemProperty 'Registry::HKEY_CURRENT_USERControl PanelDesktop' } Else { write-host 'The specified registry value does not exist.' }

レジストリキーRegistry :: HKEY_CURRENT_USER Control Panel Desktopが存在します。したがって、最後のコマンドはその値を返しました。

存在しないレジストリキーを指定するかどうかを見てみましょう…

If (Test-Path 'Registry::HKEY_CURRENT_USERControl PanelDesk') { Get-ItemProperty 'Registry::HKEY_CURRENT_USERControl PanelDesk' } Else { write-host 'The specified registry value does not exist.' }

今回は、スクリプトがスクリプトを実行します それ以外 のブロック もしも 声明。

PowerShellを使用してレジストリ値が存在する場合にそれを取得する方法

PowerShellを使用してレジストリ値を取得および比較する方法

ご想像のとおり、 Get-Item と Get-ItemProperty コマンドは、レジストリキーのタイプとデータを表示しません。したがって、キー内のデータを比較する場合は、別の方法を見つける必要があります。

PowerShellを使用してレジストリ値を読み取り、バイナリデータを返す方法のサブセクションで、Get-RegistryDataという関数を作成したことを説明しました。

このサブセクションのコマンドを実行するには、Get-RegistryData.zip関数をダウンロードする必要があります。 PowerShellを使用してレジストリ値を読み取り、バイナリデータを返す方法のサブセクションを参照してください。

この関数を使用して、指定したレジストリパスのサブキーの名前、タイプ、およびデータを返すことができます。

たとえば、HKEY_CURRENT_USER SOFTWARE Microsoft Windows CurrentVersion Explorerのすべてのエントリの名前、タイプ、およびデータを返すには、次のコマンドを実行します…

Get-RegistryData -RegistryPath 'HKEY_CURRENT_USERSOFTWAREMicrosoftWindowsCurrentVersionExplorer'

さらに進んで、の値を比較したいとします IconUnderline 別の値のキーを使用して、以下に概説するように進めます。

  1. の出力をパイプします Get-RegistryData コマンドに Where-Object コマンドと名前によるフィルターは等しい IconUnderline 。
Get-RegistryData -RegistryPath 'HKEY_CURRENT_USERSOFTWAREMicrosoftWindowsCurrentVersionExplorer' | Where-Object {$_.Name -eq 'IconUnderline'}

最後のコマンドは、IconUnderlineの現在の値が3であることを示しています。

  1. この値を別の値、たとえば2と比較したい場合は、以下のコマンドを使用します。最初のコマンドは、上記の手順1のコマンドを変数に保存します。
$RegValue = Get-RegistryData -RegistryPath 'HKEY_CURRENT_USERSOFTWAREMicrosoftWindowsCurrentVersionExplorer' | Where-Object {$_.Name -eq 'IconUnderline'} If ($RegValue.Value -ne 1) {Set-ItemProperty -Path $RegValue.Path -Name $RegValue.Name -Value 1} 

The もしも ステートメントは、レジストリキーの現在の値を1と比較します。次に、1に等しくない場合は、 Set-ItemProperty 値をで指定したものに更新するコマンド 価値 パラメータ。

PowerShellを使用してレジストリキーとサブキーを取得する方法

レジストリキーとサブキーを取得するために使用できるコマンドは2つあります。あなたは使用することができます Get-ItemProperty または Get-ChildItem 指図。

2つのコマンドの違いは、レジストリパスの指定方法です。

を使用するには Get-ItemProperty レジストリキーとサブキーを取得するには、レジストリパスの最後に円記号を追加します。次に、円記号の後ろにアスタリスクのワイルドカードを追加します。

たとえば、Get-ItemPropertyを使用して、HKEY_CURRENT_USER SOFTWARE Microsoft Windows CurrentVersion Explorerのキーとサブキーを読み取るには、次のコマンドを実行します。

Get-ItemProperty 'Registry::HKEY_CURRENT_USERSOFTWAREMicrosoftWindowsCurrentVersionExplorer*'

一方、Get-ChildItemを使用する場合、バックスラッシュとワイルドカードを追加する必要はありません。 Get-ChildItemコマンドの例を次に示します。

Get-ChildItem 'Registry::HKEY_CURRENT_USERSOFTWAREMicrosoftWindowsCurrentVersionExplorer'

どちらのコマンドも、指定されたレジストリパスのキーとサブキーを返します。

PowerShellを使用してレジストリキーのLastWriteTimeを取得する方法

この記事を調べていると、多くのユーザーがPowerShellを使用してレジストリキーが最後に更新された時刻を取得する方法を探していることがわかりました。

ただし、調査中に、このタスク用の既存のコマンドレットがないこともわかりました。さらに、唯一の解決策はカスタムPowerShell関数を作成することであるようです。

幸いなことに、私はで関数を見つけました superuser.com 。だから、私は私のものを作成する必要はありませんでした!

Sゾーンの読者が簡単に利用できるように、 追加-RegKeyLastWriteTime superuser.com 関数。

Add-RegKeyLastWriteTimeは、superuser.comコミュニティの貢献者であるCpt.Whaleの好意によるものです。

Sゾーンから関数をダウンロードするには、[Add-RegKeyLastWriteTime.zipのダウンロード]をクリックします。次に、ダウンロードしたzipファイルを解凍します。

最後に、PowerShellを開き、以下のコマンドを実行します。

Unblock-File C:UsersVictorADownloadsAdd-RegKeyLastWriteTimeAdd-RegKeyLastWriteTimeAdd-RegKeyLastWriteTime.ps1 Import-Module C:UsersVictorADownloadsAdd-RegKeyLastWriteTimeAdd-RegKeyLastWriteTimeAdd-RegKeyLastWriteTime.ps1
C: Users VictorA Downloads Add-RegKeyLastWriteTime Add-RegKeyLastWriteTime をコンピューター上の関数へのパスに置き換えます。

最後に、レジストリキーの最終書き込み時間を取得するには、次のコマンドを実行します。

Get-ChildItem HKCU: | Add-RegKeyLastWriteTime | Select Name, LastWriteTime
HKCUは、HKEY_CURRENT_CONFIGの省略形です。これについては、このガイドの「PowerShellのレジストリパスをフォーマットする方法」セクションで詳しく説明しました。

このコマンドは、HKEY_CURRENT_USERベースレジストリキー内のすべてのサブキーの最終書き込み時間を返します…

PowerShellを使用してレジストリキーを取得する方法

PowerShellを使用してレジストリサイズを取得する方法

Windows 10のレジストリのサイズを確認する場合は、次のコマンドを実行します。

Get-WmiObject -Class Win32_Registry

このコマンドは、レジストリデータベースの現在のサイズと最大サイズを返します。

ただし、コマンドの改良版を使用して、追加の結果を表示できます。私はこれを行うことができるコードを見つけました superuser.com 。

Markus(superuser.comコミュニティの寄稿者)によるコードには、追加情報が表示されます。これがコードです。

$data=Get-WmiObject -Class Win32_Registry -ErrorAction Stop Format the results and write an object to the pipeline $data | Select-Object -Property @{Name='Computername';Expression={$_.  _SERVER}}, Status, @{Name='Current Size (Mb)';Expression={$  .CurrentSize}}, @{Name='Max Size (Mb)';Expression={$_.MaximumSize}}, @{Name='Free Size (Mb)';Expression={$_.MaximumSize - $_.CurrentSize}}, @{Name='Percent Free (%)';Expression={ (1 - ($_.CurrentSize/$_.MaximumSize))*100 }}, @{Name='Created';Expression={$_.ConvertToDateTime($_.InstallDate)}}, @{Name='Age';Expression={(Get-Date) - ( $_.ConvertToDateTime($_.InstallDate)) }}

そして、PowerShellISEでの結果…

希望があれば、PowerShellを使用してレジストリ値を読み取る方法をうまく教えることができました!

また、Sゾーンがお役に立てば幸いです。役に立ったと思ったら、親切に投票してください はい この投稿は以下の役立つ質問でした。

または、このページの最後にある[返信を残す]フォームを使用して、質問したり、コメントを残したり、フィードバックを提供したりすることもできます。

最後に、その他のPowerShell Sゾーンについては、WindowsPowerShellのハウツーページにアクセスしてください。また、ホームページからの作業が非常に役立つ場合があります。

参考文献と参考資料

  1. レジストリエントリの操作
  2. Get-RegistryData.zipをダウンロードする
  3. Add-RegKeyLastWriteTime.zipをダウンロード
  4. Windows PowerShellISEの説明