Für einen regelmässigen Export aus dem Active Directory habe ich mich entschlossen das bestehende VBScript durch ein, von Grund auf neu geschriebenes, Powershell Script zu ersetzten. Active Directory Abfragen, welche früher in VBScript mit AdoDB und dem ADSI Interface gemacht wurden können mit Powershell bequem über die entsprechenden Cmdlets realisiert werden. Dabei gibt es ein paar Unterschiede zwischen dem ADSI Interface und dem Active Directory Web Services, welches von den Powershell Cmdlets genutzt wird, zu berücksichtigen. Ein Beispiel ist der Security Identifier (SID) welcher von ADSI Binär und von AD Web Services als String Repräsentation geliefert wird. Genau dieser wurde in oben erwähntem Export explizit in Binär Form gewünscht, wofür ich eine Konvertierung in das Powershell Script einbauen musste. Falls noch weitere solche Anforderungen auftauchen habe ich ein wieder verwendbares Snippet erstellt was mir ermöglicht auf allen Attributen der Abfrage Modifikationen durchzuführen. Das sieht folgendermassen aus

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
[object[]]$Attributes = 
"sAMAccountName",
"givenName",
"sn",
"Title",
"Department",
"Company",
@{L="objectSid";E={
  $buf = [Byte[]]::new($_.objectSid.BinaryLength)
  $_.objectSid.GetBinaryForm($buf,0)
  ([System.BitConverter]::ToString($buf)).Replace("-","")
}}

$Properties = ($Attributes | ForEach-Object { @($_, $_.L)[$_.L -ne $null] })
Get-ADUser -LdapFilter "(cn=pri)" -Properties $Properties | Select-Object $Attributes | Format-Table -AutoSize

In Zeile 1-12 wird ein Array aus Objekten erstellt, welches entweder nur den Attribut Namen als String enthält, wenn keine Modifikationen durchgeführt werden sollen oder eine Hashtable mit den Keys L (Label) und E (Expression) welche als Input für das Cmdlet Select-Object verwendet werden kann. Zeile 14 bildet ein String Array welches als Parameter für das -Properties Attribut der RSAT-AD Cmdlets verwendet werden kann.

Das Resultat sieht folgendermassen (hier als Tabelle formatiert) aus.

image-2-1024x454.png