Powershell : liste des OU vides et export CSV

Avec le temps, un ActiveDirectory peut contenir de plus en plus d'OU ne contenant aucun objet, car ceux-ci ont été déplacés ailleurs ou il s'agit tout simplement d'un reliquat. Le script Powershell suivant parcourt l'annuaire et liste les OU qui ne contiennent aucun objet pour ensuite en faire un fichier CSV à l'emplacement spécifié par l'utilisateur.

A noter que les OU ont eu leur chemin inversé, c'est à dire que plutôt que de commencer à l'OU pour aller vers la racine du domaine, le script écrit dans le fichier CSV le nom en commençant par la racine du domaine ; cela permet une fois que la conversion CSV > tableau est réalisée, de pouvoir trier et lire plus facilement les chemins vers les OU.

Par exemple, au lieu d'avoir un tableau comme ceci :

On obtient ceci, plus exploitable et compréhensible car on reprend le chemin qui sera parcouru dans la console pour retrouver l'OU en question :

Add-Type -AssemblyName System.Windows.Forms
[System.Windows.Forms.Application]::EnableVisualStyles()
$fileExpl = New-Object System.Windows.Forms.SaveFileDialog
$fileExpl.ValidateNames = $true
$fileExpl.CreatePrompt = $false
$fileExpl.OverwritePrompt = $true
$fileExpl.RestoreDirectory = $false
$fileExpl.InitialDirectory = "$env:userprofile"
$tempfile = "$env:temp\temp-emptyou.csv" 

$OUs = Get-ADOrganizationalUnit -filter * | select DistinguishedName
foreach ($OU in $OUs){
$OUObjects = Get-ADObject -Filter * -SearchBase $OU.DistinguishedName -SearchScope OneLevel
if($OUObjects -eq $null){
$splitOU = $OU.DistinguishedName.Split(",")
for($i=$splitOU.Length-1; $i -ge 0; $i--) {
$dump+=$splitOU[$i]+","
}
Add-Content -Value $dump -Path $tempfile
$dump = $null
}
}

$fileExpl.DefaultExt = "csv"
$fileExpl.Filter = "Comma-separated values file (*.csv)|*.csv"
$fileExpl.Title = "Export empty OU list to CSV file"
$fileExpl.Filename = ""
$fileExpl.ShowDialog() | out-null
if ($fileExpl.Filename -ne "") {
Copy-Item $tempfile -Destination $fileExpl.Filename
if ($?){ Remove-Item $tempfile ; Write-Host "Exported successfully to"$fileExpl.Filename }
else { Write-Host "There was an issue exporting the data in a CSV file." -ForegroundColor "Red" }
}
else { Remove-Item $tempfile ; Write-Host "Aborted data export." -ForegroundColor "Red" }

Lien pour marque-pages : Permaliens.

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.