共用方式為


about_Registry_Provider

提供者名稱

登錄

磁碟機

HKLM:, HKCU:

Capabilities

ShouldProcessUseTransactions

簡短描述

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

詳細描述

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

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

登錄提供者支援本文所涵蓋的下列 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 會使用別名,讓您熟悉使用提供者路徑的方式。 例如 和 之類的dir命令現在是 Get-ChildItem別名,cd是 Set-Location 的別名,而 pwd 是 Get-Locationls別名。

這個最後一個範例顯示另一個路徑語法,您可以用來巡覽 登錄 提供者。 此語法會使用提供者名稱,後面接著兩個冒號 ::。 此語法可讓您使用完整的 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...}

Get-Item Cmdlet 也可用於目前的位置。 下列範例會巡覽至 「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 將多任務緩衝處理程式服務啟動類型變更為手動。 此範例會使用 Cmdlet 將 StartType 變更回 AutomaticSet-Service

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-Item的預設值Set-ItemProperty

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:

另請參閱