使用通配符搜索和删除注册表项

时间:2013-01-22 13:48:27

标签: powershell registry

是否可以搜索通配符 - 例如*WAAgent**WAHost*并删除引用上述通配符语句的每个注册表项?

4 个答案:

答案 0 :(得分:7)

您可以尝试以下方式:

Get-ChildItem -Path HKLM:\ -Recurse -Include *WAAgent* -ErrorAction SilentlyContinue | Remove-Item
Get-ChildItem -Path HKLM:\ -Recurse -Include *WAHost* -ErrorAction SilentlyContinue | Remove-Item

您必须在-Path中指定它们是否位于HKLM(本地计算机)或HKCU(当前用户)中,因为它们是两个不同的驱动器。这必须以管理员身份运行,并且会产生很多错误(这就是我使用-ErrorAction SilentlyContinue隐藏它们的原因)。

小心:我个人认为在注册表中使用通配符并不聪明,因为它可能会删除您不知道的可能导致系统崩溃的内容。我的建议是编译一个你要删除的键的路径列表,并使用foreach循环删除它,逐个删除。同样,通配符在注册表中是危险的。

答案 1 :(得分:3)

如果要搜索属性值而不是键值(并删除相对键),可以使用以下内容:

gci HKLM: -rec -ea SilentlyContinue | % { if((get-itemproperty -Path $_.PsPath) 
    -match "WAAGent") { $_.PsPath} } | Remove-Item  

对于@ Graimer的回答,要小心!!!

答案 2 :(得分:2)

正如所有人已经建议的那样,非常谨慎地使用它!以下将通过所有注册表配置单元。请记住,找到的匹配键可以在其下方具有深层结构,并且您将其全部删除。删除WhatIf开关以实际删除密钥。

Get-ChildItem Microsoft.PowerShell.Core\Registry:: -Include *WAAgent*,*WAHost* -Recurse |
Remove-Item -Recurse -Force -WhatIf

答案 3 :(得分:0)

我遇到了注册表路径中有会话ID的问题。 为了解决这个问题,得到了注册表的第一部分,将其存储在变量中并将其用于我的foreach循环,其中存储了驱动器映射的键。

以上情况太严格了。

下面显示了在会话中删除(本地)驱动器映射的示例(我遇到的问题)。

Start-Sleep -Seconds 20

# This stores the Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\SessionInfo\<SESSIONID>"
$SessionInfo = Get-Item "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\SessionInfo\*"

cd "HKCU:\"

Start-Sleep -Seconds 1

$Items = Get-ChildItem "$SessionInfo\MyComputer\Namespace"

foreach($Item in $Items){

        Remove-Item $Item -Force -Recurse -Verbose

}