about_Registry_Provider
プロバイダー名
レジストリ
ドライブ
HKLM:
, HKCU:
機能
ShouldProcess、 UseTransactions
簡単な説明
PowerShell のレジストリ キー、エントリ、および値へのアクセスを提供します。
詳しい説明
PowerShell レジストリ プロバイダーを使用すると、PowerShell でレジストリ キー、エントリ、値を取得、追加、変更、クリア、削除できます。
レジストリ ドライブは、コンピューター上のレジストリ キーとサブキーを含む階層型名前空間です。 レジストリ エントリと値はその階層の構成要素ではありません。 各キーのプロパティです。
レジストリ プロバイダーでは、この記事で説明する次のコマンドレットがサポートされています。
- Get-Location
- Set-Location
- Get-Item
- Get-ChildItem
- Invoke-Item
- Move-Item
- New-Item
- Remove-Item
- Clear-ItemProperty
- Get-ItemProperty
- New-ItemProperty
- Remove-ItemProperty
- Set-ItemProperty
- Get-Acl
- Set-Acl
このプロバイダーによって公開される型
レジストリ キーは、 Microsoft.Win32.RegistryKey クラスのインスタンスとして表されます。 レジストリ エントリは、 PSCustomObject クラスのインスタンスとして表されます。
レジストリ ドライブの移動
レジストリ プロバイダーは、そのデータ ストアを 2 つの既定のドライブとして公開します。 レジストリの場所HKEY_LOCAL_MACHINEはドライブに HKLM:
マップされ、HKEY_CURRENT_USERはドライブに HKCU:
マップされます。 レジストリを操作するには、次のコマンドを使用して、場所を HKLM:
ドライブに変更します。
Set-Location HKLM:
ファイル システム ドライブに戻るには、ドライブ名を入力します。 たとえば、次のように入力します。
Set-Location C:
他の PowerShell ドライブから レジストリ プロバイダーを操作することもできます。 別の場所からレジストリ キーを参照するには、パスでドライブ名 (HKLM:
、 HKCU:
) を使用します。 レジストリ ドライブのレベルを示すには、円記号 (\
) またはスラッシュ (/
) を使用します。
PS C:\> cd HKLM:\Software
Note
PowerShell ではエイリアスを使用して、プロバイダー パスを使い慣れた方法で操作できます。 や などのdir
ls
コマンドは Get-ChildItem のエイリアスになり、 cd
Set-Location のエイリアスでありpwd
、Get-Location のエイリアスです。
この最後の例では、 レジストリ プロバイダー間を移動するために使用できる別のパス構文を示します。 この構文では、プロバイダー名の後に 2 つのコロン を使用します ::
。 この構文を使用すると、マップされたドライブ名 ではなく、完全な HIVE 名を使用できます HKLM
。
cd "Registry::HKEY_LOCAL_MACHINE\Software"
レジストリ キーの内容の表示
レジストリは、キー、サブキー、およびエントリに分割されます。 レジストリ構造の詳細については、「レジストリ の構造」を参照してください。
レジストリ ドライブでは、各キーはコンテナーです。 キーには、任意の数のキーを含めることができます。 親キーを持つレジストリ キーは、サブキーと呼ばれます。 を使用 Get-ChildItem
すると、レジストリ キーを表示したり、 Set-Location
キー パスに移動したりできます。
レジストリ値は、レジストリ キーの属性です。 レジストリ ドライブでは、項目のプロパティと呼ばれます。 レジストリ キーには、子キーと項目プロパティの両方を含めることができます。
この例では、 と Get-ChildItem
の違いGet-Item
を示します。 "Spooler" レジストリ キーで を使用 Get-Item
すると、そのプロパティを表示できます。
Get-Item -Path HKLM:\SYSTEM\CurrentControlSet\Services\Spooler
Hive: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services
Name Property
---- --------
Spooler DependOnService : {RPCSS, http}
Description : @%systemroot%\system32\spoolsv.exe,-2
DisplayName : @%systemroot%\system32\spoolsv.exe,-1
ErrorControl : 1
FailureActions : {16, 14, 0, 0...}
Group : SpoolerGroup
ImagePath : C:\WINDOWS\System32\spoolsv.exe
ObjectName : LocalSystem
RequiredPrivileges : {SeTcbPrivilege, SeImpersonatePrivilege, ...
ServiceSidType : 1
Start : 2
Type : 27
各レジストリ キーにはサブキーを含めることもできます。 レジストリ キーで を使用 Get-Item
する場合、サブキーは表示されません。 コマンドレットには Get-ChildItem
、各サブキーのプロパティを含む"Spooler" キーの子項目が表示されます。 を使用 Get-ChildItem
する場合、親キーのプロパティは表示されません。
Get-ChildItem -Path HKLM:\SYSTEM\CurrentControlSet\Services\Spooler
Hive: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Spooler
Name Property
---- --------
Performance Close : PerfClose
Collect : PerfCollect
Collect Timeout : 2000
Library : C:\Windows\System32\winspool.drv
Object List : 1450
Open : PerfOpen
Open Timeout : 4000
Security Security : {1, 0, 20, 128...}
コマンドレットは Get-Item
、現在の場所でも使用できます。 次の例では、"Spooler" レジストリ キーに移動し、項目のプロパティを取得します。
ドット .
は、現在の場所を示すために使用されます。
cd HKLM:\System\CurrentControlSet\Services\Spooler
Get-Item .
Hive: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services
Name Property
---- --------
Spooler DependOnService : {RPCSS, http}
Description : @%systemroot%\system32\spoolsv.exe,-2
...
このセクションで説明するコマンドレットの詳細については、次の記事を参照してください。
レジストリ キー値の表示
レジストリ キーの値は、各レジストリ キーのプロパティとして格納されます。 コマンドレットは、 Get-ItemProperty
指定した名前を使用してレジストリ キーのプロパティを表示します。 結果は、指定したプロパティを含む PSCustomObject になります。
次の例では、 コマンドレットを Get-ItemProperty
使用してすべてのプロパティを表示します。 結果のオブジェクトを変数に格納すると、目的のプロパティ値にアクセスできます。
$p = Get-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Services\Spooler
$p.DependOnService
RPCSS
http
パラメーターの値 -Name
を指定すると、指定したプロパティが選択され、 PSCustomObject が返されます。 次の例は、 パラメーターを使用する場合の出力の違いを -Name
示しています。
Get-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Wbem
BUILD : 17134.1
Installation Directory : C:\WINDOWS\system32\WBEM
MOF Self-Install Directory : C:\WINDOWS\system32\WBEM\MOF
PSPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Wbem
PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft
PSChildName : Wbem
PSDrive : HKLM
PSProvider : Microsoft.PowerShell.Core\Registry
Get-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Wbem -Name BUILD
BUILD : 17134.1
PSPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Wbem
PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft
PSChildName : Wbem
PSDrive : HKLM
PSProvider : Microsoft.PowerShell.Core\Registry
PowerShell 5.0 以降では、コマンドレットは Get-ItemPropertyValue
指定したプロパティの値のみを返します。
Get-ItemPropertyValue -Path HKLM:\SOFTWARE\Microsoft\Wbem -Name BUILD
17134.1
このセクションで使用されるコマンドレットの詳細については、次の記事を参照してください。
レジストリ キーの値の変更
コマンドレットは Set-ItemProperty
、レジストリ キーの属性を設定します。 次の例では、 を使用 Set-ItemProperty
してスプーラー サービスの開始の種類を手動に変更します。 この例では、 コマンドレットを使用して Set-Service
StartType を Automatic に戻します。
Get-Service spooler | Select-Object Name, StartMode
Name StartType
---- ---------
spooler Automatic
$path = "HKLM:\SYSTEM\CurrentControlSet\Services\Spooler\"
Set-ItemProperty -Path $path -Name Start -Value 3
Get-Service spooler | Select-Object Name, StartMode
Name StartType
---- ---------
spooler Manual
Set-Service -Name Spooler -StartupType Automatic
各レジストリ キーには 既定値があります 。 または Set-ItemProperty
を使用して、レジストリ キーの既定値をSet-Item
変更できます。
Set-ItemProperty -Path HKLM:\SOFTWARE\Contoso -Name "(default)" -Value "one"
Set-Item -Path HKLM:\SOFTWARE\Contoso -Value "two"
このセクションで使用されるコマンドレットの詳細については、次の記事を参照してください。
レジストリ キーと値の作成
コマンドレットは New-Item
、指定した名前のレジストリ キーを作成します。
コマンドレットを内部的に mkdir
呼び出す 関数を New-Item
使用することもできます。
mkdir ContosoCompany
Hive: HKEY_LOCAL_MACHINE\SOFTWARE
Name Property
---- --------
ContosoCompany
コマンドレットを New-ItemProperty
使用して、指定したレジストリ キーに値を作成できます。 次の例では、ContosoCompany レジストリ キーに新しい DWORD 値を作成します。
$path = "HKLM:\SOFTWARE\ContosoCompany"
New-ItemProperty -Path $path -Name Test -Type DWORD -Value 1
Note
その他の許容される型値については、この記事の「動的パラメーター」セクションを参照してください。
コマンドレットの使用方法の詳細については、「 New-ItemProperty」を参照してください。
レジストリ キーと値のコピー
レジストリ プロバイダーで、 コマンドレットを使用してCopy-Item
レジストリ キーと値をコピーします。 レジストリ値のみを Copy-ItemProperty
コピーするには、 コマンドレットを使用します。
次のコマンドは、"Contoso" レジストリ キーとそのプロパティを指定した場所 "HKLM:\Software\Fabrikam" にコピーします。
Copy-Item
存在しない場合は、コピー先キーを作成します。 コピー先キーが存在する場合は、 Copy-Item
コピー元キーの複製をコピー先キーの子項目 (サブキー) として作成します。
Copy-Item -Path HKLM:\Software\Contoso -Destination HKLM:\Software\Fabrikam
次のコマンドでは、 コマンドレットを Copy-ItemProperty
使用して、"Contoso" キーから "Fabrikam" キーに "Server" 値をコピーします。
$source = "HKLM:\SOFTWARE\Contoso"
$dest = "HKLM:\SOFTWARE\Fabrikam"
Copy-ItemProperty -Path $source -Destination $dest -Name Server
このセクションで使用されるコマンドレットの詳細については、次の記事を参照してください。
レジストリ キーと値の移動
コマンドレットと Move-ItemProperty
コマンドレットはMove-Item
、対応する "コピー" と同様に動作します。 宛先が存在する場合は、 Move-Item
コピー元キーを宛先キーの下に移動します。 宛先キーが存在しない場合、ソース キーは宛先パスに移動されます。
次のコマンドは、"Contoso" キーを パス HKLM:\SOFTWARE\Fabrikam
に移動します。
Move-Item -Path HKLM:\SOFTWARE\Contoso -Destination HKLM:\SOFTWARE\Fabrikam
このコマンドは、すべてのプロパティを から HKLM:\SOFTWARE\ContosoCompany
に HKLM:\SOFTWARE\Fabrikam
移動します。
$source = "HKLM:\SOFTWARE\Contoso"
$dest = "HKLM:\SOFTWARE\Fabrikam"
Move-ItemProperty -Path $source -Destination $dest -Name *
このセクションで使用されるコマンドレットの詳細については、次の記事を参照してください。
レジストリ キーと値の名前変更
レジストリ キーと値の名前は、ファイルやフォルダーと同じように変更できます。
Rename-Item
はレジストリ キーの名前を変更し Rename-ItemProperty
、レジストリ値の名前を変更します。
$path = "HKLM:\SOFTWARE\Contoso"
Rename-ItemProperty -Path $path -Name ContosoTest -NewName FabrikamTest
Rename-Item -Path $path -NewName Fabrikam
セキュリティ記述子の変更
および Set-Acl
コマンドレットを使用して、レジストリ キーへのアクセスをGet-Acl
制限できます。 次の例では、フル コントロールを持つ新しいユーザーをレジストリ キーに HKLM:\SOFTWARE\Contoso
追加します。
$acl = Get-Acl -Path HKLM:\SOFTWARE\Contoso
$rule = New-Object System.Security.AccessControl.RegistryAccessRule `
("CONTOSO\jsmith", "FullControl", "Allow")
$acl.SetAccessRule($rule)
$acl | Set-Acl -Path HKLM:\SOFTWARE\Contoso
その他の例とコマンドレットの使用方法の詳細については、次の記事を参照してください。
レジストリ キーと値の削除とクリア
内包されている項目を削除するには、Remove-Item
を使用します。ただし、その項目に他の何らかの項目が含まれている場合は、削除の確認を求められます。 次の例では、キー HKLM:\SOFTWARE\Contoso
を削除しようとしています。
dir HKLM:\SOFTWARE\Contoso\
Hive: HKEY_LOCAL_MACHINE\SOFTWARE\Contoso
Name Property
---- --------
ChildKey
Remove-Item -Path HKLM:\SOFTWARE\Contoso
Confirm
The item at HKLM:\SOFTWARE\Contoso has children and the -Recurse
parameter was not specified. If you continue, all children will be removed
with the item. Are you sure you want to continue?
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help
(default is "Y"):
メッセージを表示せずに含まれている項目を削除するには、 パラメーターを -Recurse
指定します。
Remove-Item -Path HKLM:\SOFTWARE\Contoso -Recurse
内 HKLM:\SOFTWARE\Contoso
のすべての項目を削除するが、それ自体を削除しない場合は HKLM:\SOFTWARE\Contoso
、末尾の円記号 \
の後にワイルドカードを使用します。
Remove-Item -Path HKLM:\SOFTWARE\Contoso\* -Recurse
このコマンドは、レジストリ キーから "ContosoTest" レジストリ値を HKLM:\SOFTWARE\Contoso
削除します。
Remove-ItemProperty -Path HKLM:\SOFTWARE\Contoso -Name ContosoTest
Clear-Item
は、キーのすべてのレジストリ値をクリアします。 次の例では、レジストリ キーからすべての値を HKLM:\SOFTWARE\Contoso
クリアします。 特定のプロパティのみをクリアするには、 を使用します Clear-ItemProperty
。
Get-Item .\Contoso\
Hive: HKEY_LOCAL_MACHINE\SOFTWARE
Name Property
---- --------
Contoso Server : {a, b, c}
HereString : {This is text which contains
newlines. It also contains "quoted" strings}
(default) : 1
Clear-Item .\Contoso\
Get-Item .\Contoso\
Hive: HKEY_LOCAL_MACHINE\SOFTWARE
Name Property
---- --------
Contoso
その他の例とコマンドレットの使用方法の詳細については、次の記事を参照してください。
動的パラメーター
動的パラメーターは、PowerShell プロバイダーによって追加されるコマンドレット パラメーターであり、プロバイダー対応ドライブでコマンドレットが使用されている場合にのみ使用できます。
「Microsoft.Win32.RegistryValueKind」と入力 <します>
レジストリ値のデータ型を確立または変更します。 既定値は String
(REG_SZ)。
このパラメーターは Set-ItemProperty コマンドレットの設計に基づき動作します。 レジストリ ドライブの Set-Item コマンドレットでも利用できますが、効果はありません。
値 | 説明 |
---|---|
String |
Null 終了文字列を指定します。 REG_SZ値に使用されます。 |
ExpandString |
定義されていない文字列を含む null で終わる文字列を指定します。 |
の場合に展開される環境変数への参照 | |
値が取得されます。 REG_EXPAND_SZ値に使用されます。 | |
Binary |
あらゆる形式のバイナリ データを指定します。 REG_BINARY値に使用されます。 |
DWord |
32 ビットのバイナリ数値を指定します。 REG_DWORD値に使用されます。 |
MultiString |
で終わる null で終わる文字列の配列を指定します |
2 つの null 文字。 REG_MULTI_SZ値に使用されます。 | |
QWord |
64 ビットの 2 進数を指定します。 REG_QWORD値に使用されます。 |
Unknown |
サポートされていないレジストリ データ型 (例: ) を示します。 |
REG_RESOURCE_LIST値。 |
サポートされているコマンドレット
パイプラインの使用
プロバイダー コマンドレットは、パイプライン入力を受け入れます。 パイプラインを使用すると、あるコマンドレットから別のプロバイダー コマンドレットにプロバイダー データを送信することで、タスクを簡略化できます。 プロバイダー コマンドレットでパイプラインを使用する方法の詳細については、この記事全体で提供されているコマンドレットリファレンスを参照してください。
ヘルプの表示
Windows PowerShell 3.0 より、プロバイダー コマンドレットのためにカスタマイズされたヘルプ トピックを取得できます。これはファイル システム ドライブでのプロバイダー コマンドレットの動作を説明します。
ファイル システム ドライブ用にカスタマイズされたヘルプ トピックを取得するには、ファイル システム ドライブでコマンドを Get-Help
実行するか、 Path パラメーターを使用してファイル システム ドライブを指定します。
Get-Help Get-ChildItem
Get-Help Get-ChildItem -Path HKLM: