使用登錄專案

此範例僅適用於 Windows 平臺。

由於登錄專案是機碼的屬性,因此無法直接流覽,因此在使用它們時,我們需要採取稍微不同的方法。

列出登錄專案

檢查登錄專案的方式有很多種。 最簡單的方式是取得與索引鍵相關聯的屬性名稱。 例如,若要查看登錄機碼 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion中項目的名稱,請使用 Get-Item。 登錄機碼具有屬性,其泛型名稱為 「Property」 ,這是機碼中的登錄專案清單。 下列命令會選取 Property 屬性並展開專案,使其顯示在清單中:

Get-Item -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion |
    Select-Object -ExpandProperty Property
DevicePath
MediaPathUnexpanded
ProgramFilesDir
CommonFilesDir
ProductId

若要以更容易閱讀的形式檢視登錄專案,請使用 Get-ItemProperty

Get-ItemProperty -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion
ProgramFilesDir          : C:\Program Files
CommonFilesDir           : C:\Program Files\Common Files
ProgramFilesDir (x86)    : C:\Program Files (x86)
CommonFilesDir (x86)     : C:\Program Files (x86)\Common Files
CommonW6432Dir           : C:\Program Files\Common Files
DevicePath               : C:\WINDOWS\inf
MediaPathUnexpanded      : C:\WINDOWS\Media
ProgramFilesPath         : C:\Program Files
ProgramW6432Dir          : C:\Program Files
SM_ConfigureProgramsName : Set Program Access and Defaults
SM_GamesName             : Games
PSPath                   : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWA
                           RE\Microsoft\Windows\CurrentVersion
PSParentPath             : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWA
                           RE\Microsoft\Windows
PSChildName              : CurrentVersion
PSDrive                  : HKLM
PSProvider               : Microsoft.PowerShell.Core\Registry

密鑰的 Windows PowerShell 相關屬性全都加上 “PS”,例如 PSPath、PSPare、PSParentPathPSChildNamePSProvider

您可以使用 *.* 表示法來參考目前的位置。 您可以先使用 Set-Location 變更為 CurrentVersion 登錄容器:

Set-Location -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion

或者,您可以使用內 HKLM: 建的 PSDrive 搭配 Set-Location

Set-Location -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion

接著 . ,您可以使用目前位置的表示法來列出屬性,而不指定完整路徑:

Get-ItemProperty -Path .
...
DevicePath          : C:\WINDOWS\inf
MediaPathUnexpanded : C:\WINDOWS\Media
ProgramFilesDir     : C:\Program Files
...

路徑擴充的運作方式與文件系統內相同,因此您可以從這個位置取得使用Get-ItemProperty -Path ..\HelpHKLM:\SOFTWARE\Microsoft\Windows\Help ItemProperty 清單。

取得單一登錄專案

如果您想要擷取登錄機碼中的特定專案,您可以使用數種可能的方法之一。 此範例會在 中HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion尋找 DevicePath 的值

使用Get-ItemProperty,使用Path參數來指定索引鍵的名稱,並使用Name參數來指定DevicePath項目的名稱

Get-ItemProperty -Path HKLM:\Software\Microsoft\Windows\CurrentVersion -Name DevicePath
DevicePath   : C:\WINDOWS\inf
PSPath       : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion
PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\Software\Microsoft\Windows
PSChildName  : CurrentVersion
PSDrive      : HKLM
PSProvider   : Microsoft.PowerShell.Core\Registry

此命令會傳回標準 Windows PowerShell 屬性以及 DevicePath 屬性。

注意

雖然 Get-ItemProperty 具有 FilterIncludeExclude 參數,但無法用來依屬性名稱進行篩選。 這些參數是指登錄機碼,這些登錄機碼是專案路徑,而不是登錄專案,也就是項目屬性。

另一個選項是使用 reg.exe 命令行工具。 如需 的說明 reg.exe,請在命令提示字元輸入 reg.exe /? 。 若要尋找 DevicePath 專案,請使用 reg.exe ,如下列命令所示:

reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion /v DevicePath
! REG.EXE VERSION 3.0

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion
    DevicePath  REG_EXPAND_SZ   %SystemRoot%\inf

您也可以使用 WshShell COM 物件來尋找一些登錄專案,不過此方法不適用於大型二進位數據,或是包含反斜杠 (\) 等字元的登錄項目名稱。 使用分隔符標記名稱附加至項目路徑 \

(New-Object -ComObject WScript.Shell).RegRead("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\DevicePath")
%SystemRoot%\inf

設定單一登錄專案

如果您想要變更登錄機碼中的特定專案,您可以使用數種可能的方法之一。 此範例會修改 底下的HKEY_CURRENT_USER\EnvironmentPath專案。 Path 專案會指定要尋找可執行檔的位置。

  1. 使用Get-ItemProperty擷取Path專案的目前值
  2. 加入新的值,並將它與 區隔開 ;
  3. 搭配 Set-ItemProperty 指定的機碼、專案名稱和值來修改登錄專案。
$value = Get-ItemProperty -Path HKCU:\Environment -Name Path
$newpath = $value.Path += ";C:\src\bin\"
Set-ItemProperty -Path HKCU:\Environment -Name Path -Value $newpath

注意

雖然 Set-ItemProperty 具有 FilterIncludeExclude 參數,但無法用來依屬性名稱進行篩選。 這些參數是指登錄機碼,也就是項目路徑,而不是登錄專案,也就是項目屬性。

另一個選項是使用命令行工具Reg.exe。 如需reg.exe的說明,請在命令提示字元輸入 reg.exe /?

下列範例會移除上述範例中新增的路徑,以變更 Path 專案。 Get-ItemProperty 仍然用來擷取目前的值,以避免必須剖析從 reg query傳回的字串。 SubStringLastIndexOf 方法可用來擷取新增至 Path 專案的最後一個路徑。

$value = Get-ItemProperty -Path HKCU:\Environment -Name Path
$newpath = $value.Path.SubString(0, $value.Path.LastIndexOf(';'))
reg add HKCU\Environment /v Path /d $newpath /f
The operation completed successfully.

建立新的登錄專案

若要將名為 「PowerShellPath」 的新專案新增至 CurrentVersion 機碼,請使用 New-ItemProperty 搭配索引鍵的路徑、專案名稱和專案的值。 在此範例中,我們將採用 Windows PowerShell 變數 $PSHome的值,它會儲存 Windows PowerShell 安裝目錄的路徑。

您可以使用下列命令將新專案新增至機碼,而 命令也會傳回新項目的相關信息:

New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name PowerShellPath -PropertyType String -Value $PSHome
PSPath         : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion
PSParentPath   : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows
PSChildName    : CurrentVersion
PSDrive        : HKLM
PSProvider     : Microsoft.PowerShell.Core\Registry
PowerShellPath : C:\Program Files\Windows PowerShell\v1.0

PropertyType 必須是下表中 Microsoft.Win32.RegistryValueKind 列舉成員的名稱

PropertyType 值 意義
二進位 二進位資料
DWord 有效 UInt32 的數位
ExpandString 字串,可包含動態展開的環境變數
MultiString 多行字串
String 任何字串值
QWord 8 個字節的二進位數據

您可以指定 Path 參數的值數組,將登入專案新增至多個位置:

New-ItemProperty -Name PowerShellPath -PropertyType String -Value $PSHome `
  -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion, HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion

您也可以將 Force 參數新增至任何New-ItemProperty命令,以覆寫既有的登錄專案值。

重新命名登錄專案

若要將 PowerShellPath 專案重新命名為 「PSHome」,請使用 Rename-ItemProperty

Rename-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name PowerShellPath -NewName PSHome

若要顯示重新命名的值,請將 PassThru 參數新增至命令。

Rename-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name PowerShellPath -NewName PSHome -passthru

刪除登錄專案

若要刪除 PSHome 和 PowerShellPath 登錄專案,請使用 Remove-ItemProperty

Remove-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name PSHome
Remove-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name PowerShellPath