about_Registry_Provider
提供者名稱
登錄
磁碟機
HKLM:
, HKCU:
功能
ShouldProcess、 UseTransactions
簡短描述
提供 PowerShell 中登錄機碼、專案和值的存取權。
詳細描述
PowerShell 登錄 提供者可讓您取得、新增、變更、清除和刪除 PowerShell 中的登錄機碼、專案和值。
登錄磁碟驅動器是階層式命名空間,其中包含計算機上的登錄機碼和子機碼。 登錄專案和值不是該階層的元件。 相反地,它們是每個索引鍵的屬性。
登錄提供者支援下列 Cmdlet:
- Get-Location
- Set-Location
- Get-Item
- Get-ChildItem
- Invoke-Item
- Move-Item
- 新增專案
- Remove-Item
- Clear-ItemProperty
- Get-ItemProperty
- New-ItemProperty
- Remove-ItemProperty
- 設置-ItemProperty
- Get-Acl
- Set-Acl
此提供者公開的類型
登錄提供者會傳回兩種類型之一的登錄數據:
瀏覽登錄磁碟驅動器
登錄提供者會將其數據存放區公開為兩個預設磁碟驅動器。
HKLM:
對應至登錄HKEY_LOCAL_MACHINE
區HKCU:
對應至登錄HKEY_CURRENT_USER
區
若要使用登錄,您可以使用下列命令,將位置變更為 HKLM:
磁碟驅動器。
Set-Location HKLM:
若要返回檔案系統磁碟驅動器,請輸入磁碟驅動器名稱。 例如,鍵入:
Set-Location C:
您也可以從任何其他 PowerShell 磁碟驅動器使用 登錄 提供者。 若要從另一個位置參考登錄機碼,請使用路徑中的磁碟驅動器名稱 (HKLM:
, HKCU:
) 。 使用反斜杠 (\
) 或正斜線 (/
) 表示登錄磁碟驅動器的層級。
PS C:\> cd HKLM:\Software
注意
PowerShell 會使用別名,讓您熟悉使用提供者路徑的方式。 和 之類的dir
ls
命令是 Get-ChildItem 的別名、 cd
Set-Location 的別名,而且pwd
是 Get-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...}
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 的詳細資訊,請參閱下列文章。
檢視登錄機碼值
登錄機碼值會儲存為每個登錄機碼的屬性。 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
將多任務緩衝處理程式服務啟動類型變更為手動。 此範例會將 StartType 變更回 Automatic
使用 Set-Service
Cmdlet。
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
變更default
登入機碼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-Item
和 Move-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 wasn't 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 上使用,但不會有任何作用。
String
- 用於REG_SZ值。 將[System.String]
對象傳遞至 Value 參數。ExpandString
- 用於REG_EXPAND_SZ值。 將[System.String]
對象傳遞至 Value 參數。 字串應該包含未展開的環境變數參考,這些環境變數會在擷取值時展開。Binary
- 用於REG_BINARY值。 將[System.Byte[]]
對象傳遞至 Value 參數。DWord
- 用於REG_DWORD值。 將[System.Int32]
對象傳遞至 Value 參數。MultiString
- 用於REG_MULTI_SZ值。 將[System.String[]]
對象傳遞至 Value 參數。QWord
- 用於REG_QWORD值。 將[System.Int64]
對象傳遞至 Value 參數。Unknown
- 表示不支援的登錄數據類型,例如REG_RESOURCE_LIST值。
使用管線
提供者 Cmdlet 接受管線輸入。 您可以使用管線來簡化工作,方法是將提供者數據從某個 Cmdlet 傳送至另一個提供者 Cmdlet。 若要深入瞭解如何搭配提供者 Cmdlet 使用管線,請參閱本文中提供的 Cmdlet 參考。
取得說明
從 Windows PowerShell 3.0 開始,您可以取得提供者 Cmdlet 的自定義說明主題,說明這些 Cmdlet 在文件系統磁碟驅動器中的運作方式。
若要取得針對檔案系統磁碟驅動器自定義的說明主題,請在檔案系統磁碟驅動器中執行 Get-Help
命令,或使用 Path 參數來指定檔案系統磁碟驅動器。
Get-Help Get-ChildItem
Get-Help Get-ChildItem -Path HKLM: