由於登錄項目是機碼的屬性以致無法直接瀏覽,處理時必須改用稍微不同的方式。
列出登錄項目
檢查登錄項目的方法有很多種。最簡單的方法是取得與機碼關聯的屬性名稱。例如,若要查看登錄機碼 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" 開頭,例如 PSPath、PSParentPath、PSChildName 和 PSProvider。
您可以使用 "." 標記法代表目前的位置。首先請使用 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\Help 的 ItemProperty 清單。
取得單一登錄項目
如果想要擷取登錄機碼中的某個特定項目,您可以使用下列其中一種方法。這個範例會找出 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 也有 Filter、Include 和 Exclude 參數,您無法使用這些參數依屬性名稱進行篩選。這些參數代表登錄機碼 (項目路徑) 而非登錄項目 (項目屬性)。 |
其次可使用 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