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:

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' }
Vorrei sapere se ho fatto qualche errore sintattico o logico o bug poiche` non ho una macchina a disposizione per provarlo.

GRAZIE

CIAO