Ist es möglich, nach einem Platzhalter zu suchen - Beispiel *WAAgent*
oder *WAHost*
und löschen Sie alle Registrierungsschlüssel, die oben genannten Wildcard-Anweisung verweist?Suchen und Löschen von Registrierungseinträgen mithilfe von Platzhaltern
Antwort
Sie können versuchen, so etwas wie:
Get-ChildItem -Path HKLM:\ -Recurse -Include *WAAgent* -ErrorAction SilentlyContinue | Remove-Item
Get-ChildItem -Path HKLM:\ -Recurse -Include *WAHost* -ErrorAction SilentlyContinue | Remove-Item
Sie haben in -Path
angeben, ob sie die Lage sind in HKLM (lokale Maschine) oder HKCU (aktueller Benutzer), wie sie sind zwei verschiedene Antriebe. Dies muss als Admin ausgeführt werden, und wird viele Fehler geben (deshalb habe ich -ErrorAction SilentlyContinue
verwendet, um sie zu verstecken).
ACHTUNG: Persönlich glaube ich nicht, dass es klug ist, Wildcards in der Registrierung zu verwenden, da es möglicherweise etwas löscht, von dem Sie nicht wussten, dass das System abstürzen könnte. Meine Empfehlung wäre, eine Liste von Pfaden zu den Schlüsseln zu kompilieren, die Sie entfernen möchten, und sie mit foreach zu durchlaufen, um sie einzeln zu löschen. Wiederum sind Platzhalter in der Registrierung GEFÄHRLICH.
Wenn Sie einen Eigenschaftswert suchen anstelle eines Schlüsselwert (und löschen Sie den Schlüssel einst) Sie so etwas wie diese verwenden:
gci HKLM: -rec -ea SilentlyContinue | % { if((get-itemproperty -Path $_.PsPath)
-match "WAAGent") { $_.PsPath} } | Remove-Item
Wie für die Antwort des @ Graimer, seien Sie vorsichtig !! !
Wie alle bereits vorgeschlagen haben, verwenden Sie dies mit äußerster Vorsicht !! Das Folgende wird alle Registrierungsstrukturen durchlaufen. Denken Sie daran, dass ein gefundener passender Schlüssel eine tiefere Struktur haben kann und Sie alles löschen. Entfernen Sie den WhatIf-Schalter, um die Schlüssel tatsächlich zu löschen.
Get-ChildItem Microsoft.PowerShell.Core\Registry:: -Include *WAAgent*,*WAHost* -Recurse |
Remove-Item -Recurse -Force -WhatIf
Ich hatte das Problem, dass es eine Session ID im Pfad der Registrierung gab. Um dies zu lösen, ist der erste Teil der Registrierung, in einer Variablen gespeichert und verwendet dies für meine foreach-Schleife, wo die Schlüssel für Laufwerkszuordnungen gespeichert wurden.
Das obige war zu streng in meinem Fall.
Die folgende Abbildung zeigt ein Beispiel zum Entfernen von (lokalen) Laufwerkszuordnungen in einer Sitzung (das Problem, das ich hatte).
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
}
Hatte eine Warnung dort selbst, aber machte es jetzt ein wenig klarer. Registry ist kein Platz für Wildcards in meinen Augen. Er sollte eine Liste von Schlüsseln bekommen und sie stattdessen durch eine foreach-Schleife laufen lassen. –
@Graimer Ersetze de 'As' mit 'Like', vielleicht war es nicht klar, vorsichtig zu sein, auch mit meinem Code;) –