共用方式為


about_Registry_Provider

提供者名稱

登錄

磁碟機

HKLM:, HKCU:

功能

ShouldProcessUseTransactions

簡短描述

提供 PowerShell 中登錄機碼、專案和值的存取權。

詳細描述

此資訊僅適用於在 Windows 上執行的 PowerShell。

PowerShell 登錄 提供者可讓您取得、新增、變更、清除和刪除 PowerShell 中的登錄機碼、專案和值。

登錄磁碟驅動器是階層命名空間,其中包含計算機上的登錄機碼和子機碼。 登錄項目和值不是該階層的元件。 相反地,它們是每個機碼的屬性。

登錄提供者支援下列 Cmdlet,本文涵蓋這些 Cmdlet。

此提供者公開的類型

登錄機碼會以 Microsoft.Win32.RegistryKey 類別的實例表示。 登錄專案會以 PSCustomObject 類別的實例表示。

登錄提供者會將其數據存放區公開為兩個預設磁碟驅動器。 HKEY_LOCAL_MACHINE登錄位置會對應至磁碟驅動器, HKLM: 而HKEY_CURRENT_USER對應至 HKCU: 磁碟驅動器。 若要使用登錄,您可以使用下列命令,將位置變更為 HKLM: 磁碟驅動器。

Set-Location HKLM:

若要返回檔案系統磁碟機,請輸入磁碟機名稱。 例如,輸入:

Set-Location C:

您也可以從任何其他 PowerShell 磁碟驅動器使用 登錄 提供者。 若要從另一個位置參考登錄機碼,請使用路徑中的磁碟驅動器名稱 (HKLM:) HKCU: 。 使用反斜杠 (\) 或正斜 / 線 () 來表示 登錄 磁碟驅動器的層級。

PS C:\> cd HKLM:\Software

注意

PowerShell 會使用別名,讓您熟悉使用提供者路徑。 和 之類的dirls命令現在是 Get-ChildItem 的別名、cdSet-Location 的別名,而且pwdGet-Location 的別名。

最後一個範例顯示可用來巡覽 登錄 提供者的另一個路徑語法。 此語法會使用提供者名稱,後面接著兩個冒號 ::。 此語法可讓您使用完整的 HIVE 名稱,而不是對應的磁碟驅動器名稱 HKLM

cd "Registry::HKEY_LOCAL_MACHINE\Software"

顯示登錄機碼的內容

登錄分成機碼、子機碼和專案。 如需登錄結構的詳細資訊,請參閱 登錄的結構

登錄 磁碟驅動器中,每個機碼都是容器。 索引鍵可以包含任意數目的索引鍵。 具有父機碼的登錄機碼稱為子機碼。 您可以使用 Get-ChildItem 來檢視登錄機碼,並 Set-Location 流覽至機碼路徑。

登錄值是登錄機碼的屬性。 在 登錄 磁碟驅動器中,它們稱為 項目屬性。 登錄機碼可以同時具有子機碼和項目屬性。

在此範例中,會顯示和 Get-ChildItem 之間的差異Get-Item。 當您在 Get-Item 「Spooler」 登錄機碼上使用時,可以檢視其屬性。

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 登錄機碼上使用時,不會顯示子機碼。 Cmdlet 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...}

Cmdlet 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
...

如需本節涵蓋之 Cmdlet 的詳細資訊,請參閱下列文章。

-Get-Item -Get-ChildItem

檢視登錄機碼值

登錄機碼值會儲存為每個登錄機碼的屬性。 Cmdlet 會 Get-ItemProperty 使用您指定的名稱來檢視登錄機碼屬性。 結果是 PSCustomObject ,其中包含您指定的屬性。

下列範例會 Get-ItemProperty 使用 Cmdlet 來檢視所有屬性。 將產生的物件儲存在變數中,可讓您存取所需的屬性值。

$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 Cmdlet 只會傳回您指定的屬性值。

Get-ItemPropertyValue -Path HKLM:\SOFTWARE\Microsoft\Wbem -Name BUILD
17134.1

如需本節中所用 Cmdlet 的詳細資訊,請參閱下列文章。

變更登錄機碼值

Cmdlet Set-ItemProperty 會設定登錄機碼的屬性。 下列範例會使用 Set-ItemProperty 將多任務緩衝處理服務啟動類型變更為手動。 此範例會使用 Set-Service Cmdlet 將 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"

如需本節中所用 Cmdlet 的詳細資訊,請參閱下列文章。

建立登錄機碼和值

Cmdlet New-Item 會使用您提供的名稱來建立登錄機碼。 您也可以使用 函 mkdir 式,此函式會在內部呼叫 New-Item Cmdlet。

mkdir ContosoCompany
    Hive: HKEY_LOCAL_MACHINE\SOFTWARE

Name                           Property
----                           --------
ContosoCompany

您可以使用 New-ItemProperty Cmdlet 在指定的登入機碼中建立值。 下列範例會在 ContosoCompany 登錄機碼上建立新的 DWORD 值。

$path = "HKLM:\SOFTWARE\ContosoCompany"
New-ItemProperty -Path $path -Name Test -Type DWORD -Value 1

注意

如需其他允許的類型值,請檢閱本文中的動態參數一節。

如需詳細的 Cmdlet 使用方式,請參閱 New-ItemProperty

複製登錄機碼和值

登錄 提供者中 Copy-Item ,使用 Cmdlet 複製登錄機碼和值。 Copy-ItemProperty使用 Cmdlet 只複製登錄值。 下列命令會將 「Contoso」 登錄機碼及其屬性複製到指定的位置 「HKLM:\Software\Fabrikam」。。

Copy-Item 如果目的地金鑰不存在,就會建立目的地金鑰。 如果目的地索引鍵存在, Copy-Item 請建立來源索引鍵的複本做為子專案, (目的地索引鍵) 子機碼。

Copy-Item -Path  HKLM:\Software\Contoso -Destination HKLM:\Software\Fabrikam

下列命令會 Copy-ItemProperty 使用 Cmdlet,將 “Server” 值從 “Contoso” 索引鍵複製到 “Fabrikam” 金鑰。

$source = "HKLM:\SOFTWARE\Contoso"
$dest = "HKLM:\SOFTWARE\Fabrikam"
Copy-ItemProperty -Path $source -Destination $dest -Name Server

如需本節所用 Cmdlet 的詳細資訊,請參閱下列文章。

移動登錄機碼和值

Move-ItemMove-ItemProperty Cmdlet 的行為就像其「複製」對應專案。 如果目的地存在, 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 *

如需本節所用 Cmdlet 的詳細資訊,請參閱下列文章。

重新命名登錄機碼和值

您可以重新命名登錄機碼和值,就像檔案和資料夾一樣。 Rename-Item 重新命名登錄機碼,同時 Rename-ItemProperty 重新命名登錄值。

$path = "HKLM:\SOFTWARE\Contoso"
Rename-ItemProperty -Path $path -Name ContosoTest -NewName FabrikamTest
Rename-Item -Path $path -NewName Fabrikam

變更安全性描述元

您可以使用 和 Set-Acl Cmdlet 來限制登錄機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

如需更多範例和 Cmdlet 使用方式詳細數據,請參閱下列文章。

拿掉和清除登錄機碼和值

您可以使用 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

此命令會從 HKLM:\SOFTWARE\Contoso 登錄機碼中刪除 「ContosoTest」 登錄值。

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

如需更多範例和 Cmdlet 使用方式詳細數據,請參閱下列文章。

動態參數

動態參數是PowerShell提供者新增的 Cmdlet 參數,只有在啟用提供者的磁碟驅動器中使用 Cmdlet 時才可使用。

輸入 <Microsoft.Win32.RegistryValueKind>

建立或變更登錄值的資料類型。 預設值為 String (REG_SZ) 。

這個參數是設計來在 Set-ItemProperty Cmdlet 上運作的。 它也可以在登錄磁碟機中的 Set-Item Cmdlet 上使用,但不會有任何作用。

Description
String 指定以 null 終止的字串。 用於REG_SZ值。
ExpandString 指定包含未展開的 Null 終止字串
擴充時所擴充之環境變數的參考
擷取值。 用於REG_EXPAND_SZ值。
Binary 指定任意形式的二進位資料。 用於REG_BINARY值。
DWord 指定 32 位元的二進位數字。 用於REG_DWORD值。
MultiString 指定以 Null 終止字串的陣列
兩個 Null 字元。 用於REG_MULTI_SZ值。
QWord 指定 64 位元的二進位數字。 用於REG_QWORD值。
Unknown 指出不支援的登錄數據類型,例如
REG_RESOURCE_LIST值。

支援的 Cmdlet

使用管線

提供者 Cmdlet 接受管線輸入。 您可以使用管線來簡化工作,方法是將提供者數據從一個 Cmdlet 傳送到另一個提供者 Cmdlet。 若要深入瞭解如何搭配提供者 Cmdlet 使用管線,請參閱本文中提供的 Cmdlet 參考。

取得說明

從 Windows PowerShell 3.0 開始,您可以取得提供者 Cmdlet 的自訂說明主題,這些主題說明這些 Cmdlet 在檔案系統磁碟機中的行為方式。

若要取得針對檔案系統磁碟驅動器自定義的說明主題,請在檔案系統磁碟驅動器中執行 Get-Help 命令,或使用 Path 參數來指定檔案系統磁碟驅動器。

Get-Help Get-ChildItem
Get-Help Get-ChildItem -Path HKLM:

另請參閱