Wenn es darum geht, automatisiert bestimmte Registry Keys aus allen Profilen (HKEY_USERS) zu löschen, kann das natürlich auch mit Powershell erledigt werden.
Im folgenden Beispiel wird der Key „Software\clearbyte“ mit all den darunterliegenden Keys komplett aus jedem Profil gelöscht. Das .Default Profil und all welche länger als 8 Zeichen sind werden davon jedoch ausgeschlossen.
Ungünstigerweise ist der HKEY_USERS Hive nicht standardmässig als Drive in Powershell verfügbar (zumindest in der Version 2.0 auf meiner Maschine). Aus diesem Grund ermittle ich zuerst die aktuelle Position.
# Get current location to return to at the end of the script
$CurLoc = Get-Location
Dann muss HKEY_USERS Bereich gemountet werden.
# check if HKU branch is already mounted as a PSDrive. If so, remove it first
$HKU = Get-PSDrive HKU -ea silentlycontinue
#check HKU branch mount status
if (!$HKU ) {
# recreate a HKU as a PSDrive and navigate to it
New-PSDrive -Name HKU -PsProvider Registry HKEY_USERS | out-null
Set-Location HKU:
}
Danach kann darauf wie auf jedes andere gemountete Laufwerk zugegriffen und die Userprofile ausgelesen werden.
# select all desired user profiles, exlude *_classes & .DEFAULT
$regProfiles = Get-ChildItem -Path HKU: | ? { ($_.PSChildName.Length -le 8) -and ($_.PSChildName -notlike "*.DEFAULT") }
In einer For each Schleife werden dann die gefundenen Profile nach dem zu löschenden Registry Key durchforstet. Ist dieser vorhanden, wird er gelöscht.
# loop through all selected profiles & delete registry
ForEach ($profile in $regProfiles ) {
If(Test-Path -Path $profile\$strKey){
Remove-Item -Path $profile\$strKey -recurse
}
}
Um statt eines ganzen Keys nur einzelne Werte zu löschen muss der Eintrag
Remove-Item -Path $profile\$strKey -recurse
durch den hier ersetzt werden.
Remove-ItemProperty -path "$profile\$strKey" -name "MyTestValue"
Am Schluss wird die ursprüngliche Position wieder hergestellt und der HKEY_USERS Bereich wird wieder abgehängt.
Der komplette Code:
# ==============================================================================================
# Author : clearByte
# Date : 18.09.2015
# Purpose : go through all user profiles in HKEY_USERS and delete desired key(s)
# ==============================================================================================
#GLOBALS =======================================================================================
$strKey = "Software\clearbyte"
# Get current location to return to at the end of the script
$CurLoc = Get-Location
# check if HKU branch is already mounted as a PSDrive. If so, remove it first
$HKU = Get-PSDrive HKU -ea silentlycontinue
#END GLOBALS ===================================================================================
#MAIN ==========================================================================================
#check HKU branch mount status
if (!$HKU ) {
# recreate a HKU as a PSDrive and navigate to it
New-PSDrive -Name HKU -PsProvider Registry HKEY_USERS | out-null
Set-Location HKU:
}
# select all desired user profiles, exlude *_classes & .DEFAULT
$regProfiles = Get-ChildItem -Path HKU: | ? { ($_.PSChildName.Length -gt 8) -and ($_.PSChildName -notlike "*.DEFAULT") }
# loop through all selected profiles & delete registry
ForEach ($profile in $regProfiles ) {
If(Test-Path -Path $profile\$strKey){
Remove-Item -Path $profile\$strKey -recurse
}
}
# return to initial location at the end of the execution
Set-Location $CurLoc
Remove-PSDrive -Name HKU
#END MAIN ======================================================================================