是否可以搜索通配符 - 例如*WAAgent*
或*WAHost*
并删除引用上述通配符语句的每个注册表项?
答案 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
}