Mit dem Export in eine XML Datei kann die Auswertung in einer Excel Tabelle abgeschlossen werden. Damit ich aber in Powershell intern die Daten verarbeiten kann, habe ich mir ein kleines Hilfsscript erstellt. Damit werden die ADObjekte sortiert nach „LastLogin“ Datum.

Hier könnte das Script weiter verarbeitet werden, zum Beispiel könnten die ADObjekte deaktiviert oder gelöscht werden. Dazu wurde im XML auch der LDAP Path gespeichert, so kann ohne Umwege das Objekt aufgegriffen und verarbeitet werden.

cls
$xmlFile = "C:\_Daten\xmlFile.xml"
$xmlobj = New-Object XML
$xmlobj.Load($xmlFile)
$nx = "inhalt/elements/element[@active='1']"
$nodes = $xmlobj.SelectNodes($nx)
[System.Collections.ArrayList] $helpArray = New-Object "System.Collections.ArrayList"
foreach($node in $nodes){
 $helpObject1 = new-object psobject
 $PropertyNames = $node | Get-Member -Membertype property
 $PropertyNames | foreach-Object{
 $Value = $node.GetAttribute($_.Name)
 if($_.Name -eq "lastlogin"){
 [DateTime]$lastlogin = $Value
 $helpObject1 | add-member noteproperty -Name $_.Name -Value $lastlogin -Force
 }
 else{
 $helpObject1 | add-member noteproperty -Name $_.Name -Value $Value -Force
 }
 }
$helpArray += $helpObject1
}
$helpArray | Sort-Object -Property lastlogin | ForEach-Object{
 write-host $_.name $_.lastlogin
}

Für die Verarbeitung habe ich mir ein .NET Objekt erstellt. So wird die Verarbeitung ein Kinderspiel! Wie wird so ein Objekt erstellt. Damit ich nicht für alle Objektnamen alles wieder codieren muss, habe ich mir eine Automation eingebaut.

[System.Collections.ArrayList] $helpArray = New-Object "System.Collections.ArrayList"
foreach($node in $nodes){
 $helpObject1 = new-object psobject
 $PropertyNames = $node | Get-Member -Membertype property
 $PropertyNames | foreach-Object{
 $Value = $node.GetAttribute($_.Name)
 $helpObject1 | add-member noteproperty -Name $_.Name -Value $Value -Force
 }
$helpArray += $helpObject1
}

Dieses Script Schnitzel ist sehr hilfreich 😉