CIAO
Potete dare un'occhiata a questo script che, se eseguito da una penna USB e dal Prompt dei comandi dell'amministratore di una qualsiasi edizione di Windows 7 con il comando powershell -ExecutionPolicy Unrestricted -file <unita`_penna_USB>:\RimRifRimAccountDefault.ps1 -RemovedSID '<SID_Account_eliminato>', dovrebbe eliminare tutti gli rifferimenti rimasti di un account di Windows 7 eliminato correttamente da questo S/O:
Vorrei sapere se ho fatto qualche errore sintattico o logico o bug poiche` non ho una macchina a disposizione per provarlo.codice:# Parametri da inserire in una riga di comando: # $RemovedSID Variabile che contiene un SID di un account rimosso di Windows 7 da rimuovere dal sistema. # $RemovedAccountNameDeleted Variabile che contiene il nome di un account rimosso di Windows 7 da rimuovere dal sistema. # Variabili definite dall'utente: # $Drives Variabile che contiene le lettere delle partizioni logiche di un hard-disk e gli hive del registro. # $ObjectACL Variabile che coontiene le ACL dell'oggetto analizzato. # $BadRules Variabile che permette di decidere se, fra gli ACL di un oggetto, e` contenuto il SID dell'account rimosso. # $StartKey Variabile che contiene le chiavi del registro da analizzare. # $ShouldRemove Variabile che permette di decidere se rimuovere o meno una chiave del registro a secondo del suo valore. param ($RemovedSID) param ($RemovedAccountNameDeleted) # Funzione che analizza alcune chiavi numeriche del registro relative al servizio Windows Search ed elimina le chiavi superflue che hanno il valore delle # loro voci "URL" o "Path" pari ad una directory che include ancora il SID orfano dell'account rimosso o il nome di questo account. function WindowsSearchKeysDeleted ($StartKey) { Get-ChildItem $StartKey -Recurse | ForEach-Object { # Verifica URL $ShouldRemove = @(Get-ItemProperty $_ URL | Where-Object { $_.URL -eq $RemovedSID or $RemovedAccountNameDeleted}).Count -gt 0) # Verifica Path $ShouldRemove = $ShouldRemove -or (@(Get-ItemProperty $_ Path | Where-Object { $_.Path -eq $RemovedSID or $RemovedAccountNameDeleted}).Count -gt 0) # Rimozione chiave corrente e sottochiavi if ($shouldRemove) { $_ | Remove-Item -Recurse -WhatIf } } } # Funzione che rimuove le chiavi o le voci del registro contenenti ancora il SID orfano dell'account rimosso. fuction KeyAndItemDeleted ($StartKey) { if ($StartKey -eq 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\NetCache\PurgeAtNextLogoff') { set-Location '$StartKey' Remove-ItemProperty '$RemovedSID' -WhatIf } else { Set-Location '$StartKey' Remove-Item '$RemovedSID' -WhatIf } } # Esamina le partizioni di un hard-disk e gli hive del registro per rimuovere il SID orfano dell'account rimosso dai ACL delle directory/file e delle # chiavi del registro. New-PSDrive -Name HKCR -PSProvider Registry -Root HKEY_CLASSES_ROOT New-PSDrive -Name HKU -PSProvider Registry -Root HKEY_USERS New-PSDrive -Name HKCC -PSProvider Registry -Root HKEY_CURRENT_CONFIG $Drives = [Environment]::GetLogicalDrives(), 'HKLM:\', 'HKCR:\', 'HKU:\', 'HKCC:\' $Drives | Get-ChildItem -Recurse -Force | ForEach-Object { "Verifica di {0}..." -f $_ # Recupera le ACL dell'oggetto $ObjectACL = $_.GetAccessControl() # Recupera le regole per il SID desiderato $BadRules = @( $ObjectACL.GetAccessRules($true, $false, [Security.Principal.SecurityIdentifier]) | ? { $_.IdentityReference -eq $RemovedSID } ) if ($BadRules.Count -gt 0) { "Rimozione regole orfane (elementi trovati: {0})..." -f $BadRules.Count # Rimuove le regole orfane $BadRules | ForEach-Object { $ObjectACL.RemoveAccessRule($_) } # Aggiorna le ACL dell'oggetto $_.SetAccessControl($ObjectACL) } } # Rimuove le eventuali chiavi numeriche del registro relative a Windows Search che hanno il valore delle loro voci "URL" o "Path" pari ad una directory che # include ancora il SID orfano dell'account rimosso o il nome di questo account. WindowsSearchKeysDeleted -StartKey 'HKLM:\SOFTWARE\Microsoft\Windows Search\CrawlScopeManager\Windows\SystemIndex\DefaultRules' WindowsSearchKeysDeleted -StartKey 'HKLM:\SOFTWARE\Microsoft\Windows Search\CrawlScopeManager\Windows\SystemIndex\WorkingSetRules' if (Test-Path 'HKLM:\SOFTWARE\Microsoft\Windows Search\CrawlScopeManager_Previous_Version\Windows\SystemIndex\DefaultRules' -eq "true") { WindowsSearchKeysDeleted -StartKey 'HKLM:\SOFTWARE\Microsoft\Windows Search\CrawlScopeManager_Previous_Version\Windows\SystemIndex\DefaultRules' } if (Test-Path 'HKLM:SOFTWARE\Microsoft\Windows Search\CrawlScopeManager_Previous_Version\Windows\SystemIndex\WorkingSetRules' -eq "true") { WindowsSearchKeysDeleted -StartKey 'HKLM:SOFTWARE\Microsoft\Windows Search\CrawlScopeManager_Previous_Version\Windows\SystemIndex\WorkingSetRules' } WindowsSearchKeysDeleted -StartKey 'HKLM:\SOFTWARE\Microsoft\Windows Search\Gather\Windows\SystemIndex\Sites\LocalHost\Paths' # Rimuove le eventuali chiavi del registro che hanno, come valore, il SID orfano dell'account rimosso. KeyAndItemDeleted -StartKey 'HKLM:\SOFTWARE\Microsoft\Windows Media Player NSS\3.0\MAC Access Control' KeyAndItemDeleted -StartKey 'HKLM:\SOFTWARE\Microsoft\Windows Media Player NSS\3.0\Server Settings' if (Test-Path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList' -eq "true") KeyAndItemDeleted -StartKey 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList' } if (Test-Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\NetCache\PurgeAtNextLogoff' -eq "true") { KeyAndItemDeleted -StartKey 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\NetCache\PurgeAtNextLogoff' }
GRAZIE
CIAO

Rispondi quotando