是否可以搜索通配符 - 示例*WAAgent*
或*WAHost*
删除引用上述通配符语句的每个注册表项?
问问题
27103 次
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 回答