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 :
Le script commenté est disponible en fin d’article 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"