Spesso capita che in un dominio i vecchi account computer restino comunque attivi nonostante inutilizzati da diverso tempo. Active Directory, però, salva l’informazione relativa all’ultimo accesso (lastlogondate), per cui ricercando tale informazione possiamo disabilitare un account computer in tutta sicurezza.
Per cercare e disabilitare i vecchi account computer, nell’esempio sotto vengono mostrati tutti gli account inutilizzati da oltre due anni (-730 giorni), lo script apre un controllo Out-GridViev in cui vanno selezionate le righe degli oggetti da disabilitare.
Una volta selezionate (tenendo premuto il tasto Ctrl) tutte le righe degli account da disabilitare bisognerà comunque confermare la disattivazione.
Create perciò il file DisabilitaVecchiAccountPC.ps1 come riportato qui sotto e lanciatelo da PowerShell con i diritti di amministratore.
#Script per Powershell versione > 2.0 #Importa il modulo per Active Directory write-host "Attendere l'eventuale installazione del modulo per Active Directory" import-module ActiveDirectory # Aggiungi il .NET assembly per le Message Box Add-Type -AssemblyName System.Windows.Forms # Dichiara/azzera le variabili $PCdaDisabilitare=$null $TestoPCdaDisabilitare="" $resultUninst=0 $objmsgboxiniziale = new-object -comobject wscript.shell $objmsgbox = new-object -comobject wscript.shell $objmsgboxiniziale.popup("ATTENZIONE: OPERAZIONE PERICOLOSA. LEGGERE BENE I PASSAGGI!", 0,"ATTENZIONE",0) $PCdaDisabilitare=Get-ADComputer -Filter {OperatingSystem -Like "Windows *"} -Property * | where-object {$_.enabled}|select-object Name,OperatingSystem*,Ipv*,lastlogondate|Where-Object {$_.lastlogondate -lt (get-date).AddDays(-730)}|sort-object LastLogonDate| Out-GridView -passthru -Title "Selezionare (tenendo premuto il pulsante CTRL) gli account da disabilitare" if ($PCdaDisabilitare -eq $null) {exit} $TestoPCdaDisabilitare=[system.String]::Join(", ", $PCdaDisabilitare.Name) $resultUninst=0 $titleUninst = "Disinstallazione account PC" $messageUninst = "Vuoi Disabilitare "+$TestoPCdaDisabilitare+"?" $resultUninst = $objmsgbox.popup($messageUninst, 0,$TitleUninst,4) $PCdaDisabilitare | ForEach-Object {Set-ADComputer $_.name -Enabled $False} If ($resultUninst -eq 6) {[System.Windows.MessageBox]::Show('Disabilitati gli account PC seguenti: '+$TestoPCdaDisabilitare,'Rimozione account PC') } If ($resultUninst -ne 6) {[System.Windows.MessageBox]::Show('Nessun account disabilitato','Rimozione account PC') }
Il presente script funziona solo su controller di dominio con almeno la versione 3 di Powershell. Se avete Windows Server 2008 R2 o precedente, verificate la vostra versione di Powershell con il comando $PSVersionTable.psversion.