PowerShell:删除包含特定字符串的所有注册表键

6
我想要从以下位置中删除所有包含 Python35 的键 (1000+):HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-2\Components。例如,我想要删除类似以下的所有键:
  • 键名: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-2\Components\0027CAECCC428F356B8D845FF8331246

  • 名称: 0F617A7B1C879BC47865E0155CDD6722

  • Data: C:\Users\Me\AppData\Local\Programs\Python\Python35\Lib\venv\__init__.py

我尝试了这个方法。

Get-ChildItem -path HKLM:SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-2\Components\ -Recurse | where { $_.Name -match 'Python35'} | Remove-Item -Force

Powershell运行时没有出现错误,但是当我在注册表中检查它时,键仍然存在。

PowerShell以管理员身份运行,管理员拥有键HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-2\Components的所有权以及该键及其子键的完全控制权限。


如果省略Remove-Item,你会得到什么输出?请检查“Get-ChildItem HKLM:key | Get-Member”的属性。 - user6811411
如果我省略 | Remove-Item -Force 部分,就不会有输出。我在 https://paste.ubuntu.com/24664764/ 列表中没有找到 Get-ChildItem - MagTun
你的示例密钥显示为 Python36 而不是 Python35,这将无法匹配。 - restless1987
抱歉,我拿错了密钥,其中包含Python35的密钥。 - MagTun
1个回答

9

尝试以下脚本:

$RE = 'Python35'
$Key = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-2\Components'
Get-ChildItem $Key -Rec -EA SilentlyContinue | ForEach-Object {
   $CurrentKey = (Get-ItemProperty -Path $_.PsPath)
   If ($CurrentKey -match $RE){
     $CurrentKey|Remove-Item -Force -Whatif
   }
}

如果输出看起来正常,请从Remove-Item中删除-WhatIf参数。

它正在运行,但我想知道为什么我的问题代码不起作用。 - MagTun
我认为来自注册表提供程序的Get-ChildItem输出不能直接解析。 - user6811411

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接