donderdag 28 november 2013

Snel even 300 leerlingen weggooien

De accounts van de leerlingen van vorig jaar staan er nog. Het zijn de schoolverlaters. Wat doe ik ermee? Het is een matige dag, niet veel belangrijks om te doen, geen spoedklussen of noodtoestanden. Dus ik gooi ze allemaal weg. Wat blijft er allemaal achter van een schoolverlater?


  • In de Active Directory staat het userobject
  • Op de mailserver staat een mailbox
  • Op de fileserver staat van iedere leerling een homedirectory met persoonlijke bestanden
  • Op de fileserver staat ook een profilefolder met bestanden die, als het goed is, niemand ooit ziet.

Aan het werk..

Op de mailserver fabriceer ik een lijstje met namen. In mijn Active Directory Users and Computer MMC heb ik de schoolverlaters al in een aparte OU gezet. Ze hebben in het office-veld ook allemaal "schoolverlater" staan. Anders zou daar de klas in staan, maar dit zijn schoolverlaters.

Ik rechtsklik "Exchange Management Shell". Deze machine heeft ook RSAT geinstalleerd, dus is de module "activedirectory" ook beschikbaar en mag ik in de activedirectory grutten. Ik moet hem alleen even inladen.

Import-Module activedirectory

Laat ik alvast alle mailboxen van de schoolverlaters opruimen: 


Get-ADUser -filter {Office -eq "schoolverlater"} | %{ Disable-MailBox -Identity $_ -Confirm:$False -Verbose} 

Oef! Slecht idee om de -verbose parameter mee te geven! Duizenden gele teksten schuiven langs in het venster. Daar kan ik niets mee.

Nu bewaar ik alle schoolverlaters in een tekstbestand.

Get-ADUser -filter {Office -eq "schoolverlater"} | %{ Write-Host $_.name >> verwijder.txt}


doet het hem. Ik open verwijder.txt en kopieer de inhoud. Ik open een remote desktop op de fileserver en ga hier verder. Ik plak de inhoud ervan in een bestand hier genaamd verwijder.txt . Ik rechtsklik Windows PowerShell ISE en "run as administrator". Ik open een nieuw bestand die ik noem Wis-OudeHomedirs.ps1 en tik de volgende code in:


$lijst = get-content e:\scripts\verwijder.txt
$lijst | foreach {
    $u = "E:\data\users_l\studenten\$_"
    if (test-path $U) {
        write-host "Wissen: $u"   
        takeown.exe /A /R /D y /F $u | out-null
        icacls.exe $u /t /c /reset | out-null
        remove-item $u -force -recurse -confirm:$false
    }
}

Even uitleggen. Voor elke regel in het bestand maak ik een variable met het volledige padnaam naar de homedirectory van de leerling. Ik test voor de zekerheid nog eens of hij bestaat. Dan roep ik takeown aan, een extern DOS-commando waarmee ik mijzelf eigenaar maak van de map. Dat moet , want de map behoort eerst toe aan de leerling en ik moet nu mezelf eigenaar maken om er iets mee te kunnen doen. Stap 2 is mij rechten te geven op de map en alle onderliggende bestanden en files door de externe DOS-commando icacls.exe aan te roepen. . Vervolgens doet het PowerShell cmdlet Remove-Item het echte werk: recursief verwijderen en geen vragen stellen! 

Ditzelfde doe ik met de profieldirectory en dan zijn alle schoolverlaters weg! De rector kan tevreden zijn. Ik stap met een voldaan gevoel op de fiets en ga naar huis.


Geen opmerkingen:

Een reactie posten