共用方式為


使用登錄專案

此範例僅適用於 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 安裝目錄的路徑。

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

$newItemPropertySplat = @{
    Path = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion'
    Name = 'PowerShellPath'
    PropertyType = 'String'
    Value = $PSHome
}
New-ItemProperty @newItemPropertySplat
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 列舉成員的名稱

  • 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 參數。

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

$newItemPropertySplat = @{
    Name = 'PowerShellPath'
    PropertyType = 'String'
    Value = $PSHome
    Path = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion',
           'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion'
}
New-ItemProperty @newItemPropertySplat

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

下列範例示範如何建立各種類型的新登錄專案。 登錄值會在 下HKEY_CURRENT_USER\Software名為 MySoftwareKey 的新機碼中建立。 變數 $key 是用來儲存新的索引鍵物件。

$key = New-Item -Path HKCU:\Software -Name MySoftwareKey
$newItemPropertySplat = @{
    Path = $key.PSPath
    Name = 'DefaultFolders'
    PropertyType = 'MultiString'
    Value = 'Home', 'Temp', 'Publish'
}
New-ItemProperty @newItemPropertySplat
DefaultFolders : {Home, Temp, Publish}
PSPath         : Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER\Software\MySoftwareKey
PSParentPath   : Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER\Software
PSChildName    : MySoftwareKey
PSProvider     : Microsoft.PowerShell.Core\Registry

您可以在後續命令中使用 金鑰物件的 PSPath 屬性。

New-ItemProperty -Path $key.PSPath -Name MaxAllowed -PropertyType QWord -Value 1024
MaxAllowed   : 1024
PSPath       : Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER\Software\MySoftwareKey
PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER\Software
PSChildName  : MySoftwareKey
PSProvider   : Microsoft.PowerShell.Core\Registry

您也可以使用管線 $keyNew-ItemProperty 值新增至索引鍵。

$date = Get-Date -Format 'dd-MMM-yyyy'
$newItemPropertySplat = @{
    Name = 'BinaryDate'
    PropertyType = 'Binary'
    Value = ([System.Text.Encoding]::UTF8.GetBytes($date))
}
$key | New-ItemProperty @newItemPropertySplat
BinaryDate   : {51, 49, 45, 74…}
PSPath       : Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER\Software\MySoftwareKey
PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER\Software
PSChildName  : MySoftwareKey
PSProvider   : Microsoft.PowerShell.Core\Registry

顯示的內容 $key 會顯示新專案。

$key
    Hive: HKEY_CURRENT_USER\Software

Name                           Property
----                           --------
MySoftwareKey                  DefaultFolders : {Home, Temp, Publish}
                               MaxAllowed     : 1024
                               BinaryDate     : {51, 49, 45, 74…}

下列範例顯示每種登錄項目的實值類型:

$key.GetValueNames() | Select-Object @{n='ValueName';e={$_}},
     @{n='ValueKind';e={$key.GetValueKind($_)}},
     @{n='Type';e={$key.GetValue($_).GetType()}},
     @{n='Value';e={$key.GetValue($_)}}
ValueName        ValueKind Type            Value
---------        --------- ----            -----
DefaultFolders MultiString System.String[] {Home, Temp, Publish}
MaxAllowed           QWord System.Int64    1024
BinaryDate          Binary System.Byte[]   {51, 49, 45, 74…}

重新命名登錄專案

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

$renameItemPropertySplat = @{
    Path = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion'
    Name = 'PowerShellPath'
    NewName = 'PSHome'
}
Rename-ItemProperty @renameItemPropertySplat

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

$renameItemPropertySplat = @{
    Path = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion'
    Name = 'PowerShellPath'
    NewName = 'PSHome'
    PassThru = $true
}
Rename-ItemProperty @renameItemPropertySplat

刪除登錄專案

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

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