lundi 9 juillet 2018

Powershell : liste des homedirs orphelins V2

J'avais présenté dans un précédent article un script Powershell permettant de lister les homedirs orphelins, c'est à dire les homedirs dont le compte AD lié n'existe plus. Celui-ci se basait sur une vérification du nom du répertoire et testait la corrélation avec un utilisateur existant dans l'AD. Rapide mais peu robuste car un utilisateur changeant d'identifiant déjoue le script.

J'ai donc réalisé une v2 de ce script, en utilisant cette fois-ci l'instruction Get-Acl pour récupérer le propriétaire des répertoires. Chaque homedir possède en propriétaire un SID qui renvoie vers un utilisateur local ou du domaine. Si l'utilisateur du domaine est supprimé, alors le SID disparaît de l'annuaire... mais reste référencé en tant que propriétaire du homedir, comme on peut le voir sur cette capture d'écran du répertoire avec la colonne Owner affichée :

comptetest sur DOMAIN existe toujours par contre les comptes propriétaires des autres répertoires ont été supprimés de l'AD car Windows ne fait pas le lien entre le SID enregistré et un SID existant dans l'annuaire.



Le script commenté est disponible sur le miroir de téléchargement et est prêt à être adapté à n'importe quel environnement.

function noexist{
    Write-Host "Homedir $folderfullpath doesn't have any owner."
    Add-Content -path "orphan-homedir.log" -Force -Value $folderfullpath
}

Write-Host "Orphan homedir listing script V2"
Write-Host "================================"
Write-Host ""
Clear-Content -path "orphan-homedir.log" -Force
for ($Line = 15; $Line -gt 0; $Line--) {
    $RemoteServer = (Get-Content C:\homedir-srv-list.txt -TotalCount 15)[-$Line]
    Write-Host "Building user homedir list on $RemoteServer"
    $HomedirPath = "\\"+$RemoteServer+"\c$\homedir\"
    Add-Content -path "orphan-homedir.log" -Force -Value "`r`n$RemoteServer`r`n========"
    $folderlist = Get-ChildItem $HomedirPath | select name
    Write-Host "Checking directories ACLs"
    foreach ($folder in $folderlist) {
        $folderFullPath = $homedirpath+$folder.Name
        $prop = Get-Acl $folderFullPath
        if ($prop.Owner.Contains("S-1-5-21")) { noexist }
    }
}
Write-Host "Please find in orphan-homedir.log the list of homedirs that don't have any linked AD account."
Write-Host "Bye"

Aucun commentaire:

Enregistrer un commentaire