2013-01-22 20 views

risposta

7

Si può provare qualcosa di simile:

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

È necessario specificare in -Path se sono in posizione HKLM (macchina locale) o HKCU (utente corrente), in quanto sono due unità differenti. Questo deve essere eseguito come amministratore e darà molti errori (è per questo che ho usato -ErrorAction SilentlyContinue per nasconderli).

ATTENZIONE: Personalmente non penso che sia intelligente utilizzare i caratteri jolly nel registro, anche se potrebbe cancellare qualcosa che non sapevate che potrebbe causare un arresto anomalo del sistema. La mia raccomandazione sarebbe quella di compilare un elenco di percorsi per le chiavi che si desidera rimuovere e scorrere attraverso di esso con foreach per eliminare uno per uno. Ancora una volta, i caratteri jolly sono PERICOLOSI nel registro.

3

Se siete alla ricerca di un valore di proprietà invece di un valore chiave (e cancellare il relativo tasto) si può usare qualcosa di simile:

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

Come per la risposta di @ Graimer, fate attenzione !! !

+0

Avevo già un avvertimento, ma l'ho reso un po 'più chiaro ora. Il registro non è un posto per i caratteri jolly nei miei occhi. Dovrebbe ottenere un elenco di chiavi ed eseguirle invece attraverso un ciclo foreach. –

+1

@Graimer Sostituito de 'As' con 'Mi piace', forse non era chiaro di stare attento anche a usare il mio codice;) –

2

Come tutti hanno già suggerito, utilizzare questo con estrema cautela !! Quanto segue passerà attraverso tutti gli hive del registro. Tieni presente che una chiave trovata trovata può avere una struttura profonda al di sotto e stai eliminando tutto. Rimuovere l'opzione WhatIf per eliminare effettivamente le chiavi.

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

Ho avuto il problema che c'era un ID sessione nel percorso del registro. Per risolvere questo problema si ottiene la prima parte del registro, memorizzata in una variabile e utilizzata per il ciclo foreach in cui sono state memorizzate le chiavi per i mapping delle unità.

Quanto sopra era troppo rigoroso nel mio caso.

Di seguito è riportato un esempio per rimuovere i mapping di unità (locali) in una sessione (il problema riscontrato).

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 

} 
Problemi correlati