6

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

4

4 回答 4

8

您可以尝试以下方法:

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 循环遍历它以逐个删除。同样,通配符在注册表中是危险的。

于 2013-01-22T14:04:13.297 回答
3

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

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

就像@Graimer 的回答一样,小心!!!

于 2013-01-22T14:18:09.420 回答
2

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

Get-ChildItem Microsoft.PowerShell.Core\Registry:: -Include *WAAgent*,*WAHost* -Recurse |
Remove-Item -Recurse -Force -WhatIf
于 2013-01-22T14:44:40.190 回答
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

}
于 2017-05-11T07:09:45.360 回答