[英]Powershell - Remove (Default) registry key?
我看到你可以通過運行刪除項目:
Remove-Item -Path hkcu:\CurrentVersion
但我試過了
Remove-Item -Path 'Registry::HKEY_CURRENT_USER\Software\Testing\(Default)'
但那沒用。 我也試過了
Remove-Item -Path 'Registry::HKEY_CURRENT_USER\Software\Testing\' -name '(Default)'
哪個也行不通。 有關如何通過PowerShell刪除(默認)注冊表項的任何想法?
您是否嘗試從注冊表.msc控制台中刪除它?
我認為無法刪除密鑰的默認值。
(以下行是刪除(默認)作為密鑰名稱的答案),
這是通過PowerShell從注冊表項中刪除默認值:( 默認)的答案。
從v1開始,它應該是PS中的一個錯誤。 現在截至2018年,隨着v5.1,bug仍然存在。
實際上Remove-Item -Path 'Registry::HKEY_CURRENT_USER\\Software\\Testing\\' -name '(Default)'
是錯誤的,因為(默認)不是Key,而是屬性,
但是,讓我們大多數人嘗試過:
Remove-ItemProperty -Path Registry::HKEY_CURRENT_USER\\Software\\Testing -Name '(Default)'
這應該有效。
幸運的是,與許多PS Cmdlet一樣, Remove-ItemProperty的功能可以通過使用Method來代替。 在這種情況下,在RegistryKey對象上調用DeleteValue()方法。
由Get-Item獲得的一個小打嗝作為Key是只讀的。 但另一個方法,OpenSubKey()可用於獲取對Key的可寫訪問。
function Remove-ItemPropertyDefault {
[CmdletBinding(SupportsShouldProcess=$true)]
Param (
[parameter(ParameterSetName='Path', Mandatory=$true, Position=0)]
[String]$Path,
[parameter(ParameterSetName='Key', Mandatory=$true, ValueFromPipeline=$true)]
[Microsoft.Win32.RegistryKey]$Key
)
if ($Path) {$Key = Get-Item -LiteralPath $Path}
$ParentKey = Get-Item -LiteralPath $Key.PSParentPath
$KeyName = $Key.PSChildName
($ParentKey.OpenSubKey($KeyName, $True)).DeleteValue('')
}
使用:
Remove-ItemPropertyDefault Registry::HKEY_CURRENT_USER\\Software\\Testing
要么
Get-Item Registry::HKEY_CURRENT_USER\\Software\\Testing | Remove-ItemPropertyDefault
要么
$k = Get-Item Registry::HKEY_CURRENT_USER\\Software\\Testing Remove-ItemPropertyDefault -Key $k
當然,如果您不需要或不需要函數,只需從中獲取這三行並在代碼中使用它。
這是一篇很好的文章,它給了我這個想法。
在OP可能被問及與名稱(默認)從關鍵,因為人們在這里登陸大多搜索刪除密鑰 ,而不是默認值。 在這種情況下,應該使用-LiteralPath,因為在-Path參數中將括號視為特殊字符,而-LiteralPath則使用它們的字面含義:
Remove-Item -LiteralPath 'Registry::HKEY_CURRENT_USER\Software\Testing\(Default)'
或括號需要轉義:
Remove-Item -Path "Registry::HKEY_CURRENT_USER\Software\Testing\`(Default`)"
(*)單引號不能使用,但雙引號或無引號必須用於轉義字符才能工作。
或者最后,如果Path不是文字,則可以使用函數來轉義字符串,在編寫代碼時不知道:
Remove-Item -Path ([Management.Automation.WildcardPattern]::Escape('Registry::HKEY_CURRENT_USER\Software\Testing\(Default)'))
(*)這將在Path參數中添加具有特殊含義的字符前面的`
迭代@ papo的答案 - 如果OP希望清除(取消) (Default)
注冊表值的內容並使用標准方式在PowerShell中訪問注冊表,oneliner將是
$(Get-Item -Path "HKCU:\Software\Testing").OpenSubKey("", $true).DeleteValue("")
Get-Item -Path
獲取RegistryKey對象以供讀取 OpenSubKey("", $true)
使用寫入權限重新打開相同的密鑰 DeleteValue("")
清除默認值(在.NET中視為未命名)值
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.