[英]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.