由於登錄項目是機碼的屬性以致無法直接瀏覽,處理時必須改用稍微不同的方式。

列出登錄項目

檢查登錄項目的方法有很多種。最簡單的方法是取得與機碼關聯的屬性名稱。例如,若要查看登錄機碼 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion 中的項目名稱,請使用 Get-Item。登錄機碼有個屬性就叫做 "Property",當中列有該機碼底下的登錄項目。下列命令選取 Property 屬性並展開當中的項目,以使其顯示成清單:

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

若要以更易於閱讀的形式檢視登錄項目,請使用 Get-ItemProperty

PS> Get-ItemProperty -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion


PSPath              : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SO
                      FTWARE\Microsoft\Windows\CurrentVersion
PSParentPath        : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SO
                      FTWARE\Microsoft\Windows
PSChildName         : CurrentVersion
PSDrive             : HKLM
PSProvider          : Microsoft.PowerShell.Core\Registry
DevicePath          : C:\WINDOWS\inf
MediaPathUnexpanded : C:\WINDOWS\Media
ProgramFilesDir     : C:\Program Files
CommonFilesDir      : C:\Program Files\Common Files
ProductId           : 76487-338-1167776-22465
WallPaperDir        : C:\WINDOWS\Web\Wallpaper
MediaPath           : C:\WINDOWS\Media
ProgramFilesPath    : C:\Program Files
PF_AccessoriesName  : Accessories
(default)           :

機碼與 Windows PowerShell 有關的屬性均以 "PS" 開頭,例如 PSPathPSParentPathPSChildNamePSProvider

您可以使用 "." 標記法代表目前的位置。首先請使用 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

接著使用 "." 標記法代表目前位置,即可在不指定完整路徑的情況下列出所有屬性:

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

路徑展開原理與檔案系統一樣,因此您可以使用 Get-ItemProperty -Path ..\Help 從這個位置取得 HKLM:\SOFTWARE\Microsoft\Windows\HelpItemProperty 清單。

取得單一登錄項目

如果想要擷取登錄機碼中的某個特定項目,您可以使用下列其中一種方法。這個範例會找出 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion 中的 DevicePath 值。

藉由使用 Get-ItemProperty,可利用 Path 參數指定機碼的名稱,並利用 Name 參數指定 DevicePath 項目的名稱。

PS> Get-ItemProperty -Path HKLM:\Software\Microsoft\Windows\CurrentVersion -Name DevicePath


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
DevicePath   : C:\WINDOWS\inf

此命令不僅傳回一般 Windows PowerShell 屬性,也傳回 DevicePath 屬性。

附註:

雖然 Get-ItemProperty 也有 FilterIncludeExclude 參數,您無法使用這些參數依屬性名稱進行篩選。這些參數代表登錄機碼 (項目路徑) 而非登錄項目 (項目屬性)。

其次可使用 Reg.exe 命令列工具。如需 reg.exe 的相關說明,請在命令提示字元輸入 reg.exe /?。使用 reg.exe 尋找 DevicePath 項目的方法如下列命令所示:

PS> 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 物件來尋找登錄項目,但這種方法不適用於大型二進位資料,或是名稱中包含 "\" 字元的登錄項目。請指定項目路徑加上 \ 分隔符號,後面接著屬性名稱:

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

建立新登錄項目

若要在 CurrentVersion 機碼中新增名稱為 "PowerShellPath" 的項目,請使用 New-ItemProperty 指定機碼的路徑、項目名稱和項目的值。在此範例中,我們會用到 Windows PowerShell 變數 $PSHome 的值,該變數儲存著 Windows PowerShell 安裝目錄的路徑。

下列命令不僅在機碼中新增項目,還傳回新項目的相關資訊:

PS> New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name PowerShellPath -PropertyType String -Value $PSHome


PSPath         : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWAR
                 E\Microsoft\Windows\CurrentVersion
PSParentPath   : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWAR
                 E\Microsoft\Windows
PSChildName    : CurrentVersion
PSDrive        : HKLM
PSProvider     : Microsoft.PowerShell.Core\Registry
PowerShellPath : C:\Program Files\Windows PowerShell\v1.0

PropertyType 必須是下表所列其中一個 Microsoft.Win32.RegistryValueKind 列舉成員的名稱:

PropertyType 值 意義

Binary

二進位資料

DWord

有效的 UInt32 數字

ExpandString

可包含環境變數的動態擴充字串

MultiString

多行字串

String

任意字串值

QWord

8 位元組二進位資料

附註:

若將 Path 參數的值指定成陣列,即可在多個位置上新增登錄項目:

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

不論任何 New-ItemProperty 命令皆可加上 Force 參數,以覆寫現存的登錄項目值。

重新命名登錄項目

若要將 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

刪除登錄項目

使用 Remove-ItemProperty 可同時刪除 PSHome 和 PowerShellPath 這兩個登錄項目:

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




目錄