2013-01-22 78 views

回答

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循環刪除一個一個的鍵。同樣,通配符在註冊表中是危險的。

3

如果您正在搜索的屬性值,而不是一個關鍵值(並刪除相關鍵)就可以使用這樣的:對@ Graimer的回答

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

一樣,要小心! !

+0

在那裏發出了警告,但現在讓它更清晰一些。註冊表不是我眼中的通配符。他應該得到一個鍵列表,然後通過foreach循環來運行它們。 –

+1

@Graimer用'Like'替代了'As',或許還不清楚是否還在使用我的代碼;) –

2

正如所有已經建議,使用這個非常謹慎!以下內容將貫穿所有註冊表配置單元。請記住,找到的匹配關鍵字可能在其下面有一個深層結構,並且您將其全部刪除。刪除WhatIf開關以實際刪除密鑰。

Get-ChildItem Microsoft.PowerShell.Core\Registry:: -Include *WAAgent*,*WAHost* -Recurse | 
Remove-Item -Recurse -Force -WhatIf 
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 

}