Active Directory - Scripting Basics

Für den Zugriff auf ein Active Directory AD und für Modifikationen von Active Directory Objekten gibt es mehrere Schnittstellen (als DLL-Dateien implementiert), die sich einfach über Skripte ansprechen lassen.

Eine Schnittstelle für Zugriffe auf AD ist ADSI (Active Directory Service Interfaces). Über ADSI wird der Windows Script Host um Funktionen erweitert, die es ermöglichen, z.B. Objekte in einem AD zu erstellen.

Als Protokoll für Zugriffe auf ein AD wird LDAP (Lightweight Directory Access Protocol) verwendet.
Das folgende Code Fragment zeigt, wie ein Benutzerobjekt mit einem Skript erzeugt werden kann.

Set objOU = Wscript.GetObject("LDAP://OU=myOU,dc=myDomain,dc=com")
Set objUser = objOU.Create("User", "cn=Nachname.Vorname")
objUser.Put "sAMAccountName", "navorname"
objUser.SetInfo

Das Benutzerobjekt im obigen Beispiel hätte nach erfolgreicher Erzeugung innerhalb des AD den kompletten LDAP-Pfad LDAP://CN=Nachname.Vorname,OU=myOU,DC=myDomain,DC=com

Jedes AD Objekt hat einen distinguishedName (DN) - im Beispiel oben ist das "CN=Nachname.Vorname,OU=myOU,DC=myDomain,DC=com" worüber dieses Objekt in der AD Hierarchie eindeutig identifizierbar ist.

Im Attribut Common Name (CN) steht der Namen des Objekts, der innerhalb einer Active Directory Gesamtstruktur eindeutig sein muss.

Neben den Attributen DN und CN gibt es für jedes AD Objekt eine Vielzahl weiterer Attribute, die im Schema definiert sind und die mit Werten belegt werden können.

Für viele Attribute gibt es in der Management Konsole "Active Directory Users and Computers" kein Feld, um Werte sehen oder modifizieren zu können. Werden diese Attribute in irgendeiner Weise trotzdem benötigt, dann kann z.B. mit einem Skript über ADSI darauf zugegriffen werden.
Der Vollständigkeit halber möchte ich die Command Line Tools LDIFDE.exe und CSVDE.exe nicht unerwähnt lassen. Mit diesen Programmen können sehr schnell eine große Anzahl von AD Objekten ausgelesen bzw. modifiziert werden.

Sehr komfortabel lassen sich Active Directory Informationen mit ADSearchAdmin© auslesen.

In der Tabelle unten sind LDAP Atttribute von Benutzerobjekten und einige zusätzliche Informationen zu den Attributen aufgelistet.

Die Spaltenüberschriften haben in der 2. Tabelle unten folgende Bedeutung:
LDAP Attribute Der Name des Attributs.
ADUC Tab Englischer Name des Reiters in der Management Konsole "Active Directory Users and Computers" wenn ein Benutzerobjekt mit Doppelklick geöffnet wird.
ADUC Field Englischer Name des Feldes im Reiters der Management Konsole "Active Directory Users and Computers"
Type Der Typ des Attributs.
OID ist ein eindeutiger Object Identifier im Schema für diese Objekt Klasse.
DN ist ein distinguishedName also ein Eintrag für ein AD Objekt
DirectoryString ist ein Unicode String
Integer und Large Integer (Integer8) sind Zahlenwerte
MultiVal Diese Attribute können mehrere Werte enthalten. So stehen beispielsweise im Attribut MemberOf alle distinguished Names der Gruppen, in denen dieses Benutzerobjekt Mitglied ist.
GC Dieses Attribut wird im Global Catalogue veröffentlicht und steht damit auf allen Domaincontrollern für Suchoperationen etc. zur Verfügung.


LDAP Attribute ADUC Tab ADUC Field Type MultiVal GC
accountExpires Account Account expires INTEGER8    
accountNameHistory     DirectoryString true  
aCSPolicyName     DirectoryString    
adminCount     INTEGER    
adminDescription     DirectoryString    
adminDisplayName     DirectoryString    
allowedAttributes     OID true  
allowedAttributesEffective     OID true  
allowedChildClasses     OID true  
allowedChildClassesEffective     OID true  
altSecurityIdentities     DirectoryString true true
assistant     DN    
badPasswordTime     INTEGER8    
badPwdCount     INTEGER    
bridgeheadServerListBL     DN true  
c Address Country/region DirectoryString   true
canonicalName Object Fully qualified domain name of object DirectoryString true  
cn     DirectoryString   true
co Address Country/region DirectoryString    
codePage     INTEGER    
comment     DirectoryString    
company Organization Company DirectoryString    
controlAccessRights     OctetString true  
countryCode Address Country/region INTEGER    
createTimeStamp     GeneralizedTime    
dBCSPwd     OctetString    
defaultClassStore     DN true  
department Organization Department DirectoryString    
description General Description DirectoryString true true
desktopProfile     DirectoryString    
destinationIndicator     PrintableString true  
directReports Organization Direct reports DN true  
displayName General Display name DirectoryString   true
displayNamePrintable     PrintableString    
distinguishedName     DN   true
division     DirectoryString    
dSASignature     OctetString    
dSCorePropagationData     GeneralizedTime true true
dynamicLDAPServer     DN    
employeeID     DirectoryString    
extensionName     DirectoryString true  
facsimileTelephoneNumber Telephones Fax DirectoryString    
flags     INTEGER   true
fromEntry     Boolean true  
frsComputerReferenceBL     DN true  
fRSMemberReferenceBL     DN true  
fSMORoleOwner     DN    
garbageCollPeriod     INTEGER    
generationQualifier     DirectoryString    
givenName General First name DirectoryString   true
groupMembershipSAM     OctetString    
groupPriority     DirectoryString true  
groupsToIgnore     DirectoryString true  
homeDirectory Profile Home folder: Local path/To DirectoryString    
homeDrive Profile Home folder: Connect DirectoryString    
homePhone Telephones Home DirectoryString   true
homePostalAddress     DirectoryString    
info Telephones Notes DirectoryString    
initials General Initials DirectoryString    
instanceType     INTEGER   true
internationalISDNNumber     NumericString true  
ipPhone Telephones IP phone DirectoryString   true
isCriticalSystemObject     Boolean    
isDeleted     Boolean   true
isPrivilegeHolder     DN true  
l Address City DirectoryString   true
lastKnownParent     DN    
lastLogoff     INTEGER8    
lastLogon     INTEGER8    
legacyExchangeDN     CaseIgnoreString   true
lmPwdHistory     OctetString true  
localeID     INTEGER true  
lockoutTime Account Account is locked out INTEGER8    
logonCount     INTEGER    
logonHours Account Logon Hours OctetString    
logonWorkstation     OctetString    
mail General E-mail DirectoryString   true
managedObjects     DN true  
manager Organization Manager DN   true
masteredBy     DN true  
maxStorage     INTEGER8    
memberOf Member Of Member of DN true  
mhsORAddress     DirectoryString true  
middleName     DirectoryString    
mobile Telephones Mobile DirectoryString    
modifyTimeStamp     GeneralizedTime    
mS-DS-ConsistencyChildCount   INTEGER    
mS-DS-ConsistencyGuid     OctetString    
mS-DS-CreatorSID     OctetString    
mSMQDigests     OctetString true true
mSMQDigestsMig     OctetString true true
mSMQSignCertificates     OctetString   true
mSMQSignCertificatesMig     OctetString   true
msNPAllowDialin     Boolean    
msNPCallingStationID     IA5String true  
msNPSavedCallingStationID     IA5String true  
msRADIUSCallbackNumber     IA5String    
msRADIUSFramedIPAddress   INTEGER    
msRADIUSFramedRoute     IA5String true  
msRADIUSServiceType     INTEGER    
msRASSavedCallbackNumber   IA5String    
msRASSavedFramedIPAddress   INTEGER    
msRASSavedFramedRoute     IA5String true  
name     DirectoryString   true
netbootSCPBL     DN    
networkAddress     CaseIgnoreString true  
nonSecurityMemberBL     DN true  
ntPwdHistory     OctetString true  
nTSecurityDescriptor Security N/A ObjectSecurityDescriptor   true
o     DirectoryString true true
objectCategory     DN   true
objectClass Object Object class OID true true
objectGUID     OctetString   true
objectSid     OctetString   true
objectVersion     INTEGER    
operatorCount     INTEGER    
otherFacsimileTelephoneNumber Telephones Fax Number (Others) DirectoryString true  
otherHomePhone Telephones Home Phone (Others) DirectoryString true  
otherIpPhone Telephones IP Phone Number (Others) DirectoryString true true
otherLoginWorkstations     DirectoryString true  
otherMailbox     DirectoryString true  
otherMobile Telephones Mobile Number (Others) DirectoryString true  
otherPager Telephones Pager Number (Others) DirectoryString true  
otherTelephone General Phone Number (Others) DirectoryString true  
otherWellKnownObjects     DNWithBinary true  
ou     DirectoryString true true
pager Telephones Pager DirectoryString    
partialAttributeDeletionList     OctetString   true
partialAttributeSet     OctetString   true
personalTitle     DirectoryString    
physicalDeliveryOfficeName General Office DirectoryString    
possibleInferiors     OID true  
postalAddress     DirectoryString true  
postalCode Address Zip/Postal Code DirectoryString    
postOfficeBox Address P.O. Box DirectoryString true  
preferredDeliveryMethod     INTEGER true  
preferredOU     DN    
primaryGroupID Member Of Primary group INTEGER   true
primaryInternationalISDNNumber   DirectoryString    
primaryTelexNumber     DirectoryString    
profilePath Profile Profile path DirectoryString    
proxiedObjectName     DNWithBinary   true
proxyAddresses     DirectoryString true  
pwdLastSet     INTEGER8    
queryPolicyBL     DN true  
registeredAddress     OctetString true  
replPropertyMetaData     OctetString   true
replUpToDateVector     OctetString   true
repsFrom     OctetString true true
repsTo     OctetString true true
revision     INTEGER    
rid     INTEGER    
sAMAccountName Account User logon name (pre-Windows 2000) DirectoryString   true
sAMAccountType     INTEGER   true
scriptPath Profile Logon script DirectoryString    
sDRightsEffective     INTEGER    
securityIdentifier     OctetString    
seeAlso     DN true  
serverReferenceBL     DN    
servicePrincipalName     DirectoryString true true
showInAddressBook     DN true  
showInAdvancedViewOnly     Boolean    
sIDHistory     OctetString true true
siteObjectBL     DN true  
sn General Last name DirectoryString   true
st Address State/province DirectoryString   true
street     DirectoryString   true
streetAddress Address Street DirectoryString    
subRefs     DN true true
subSchemaSubEntry     DN true  
supplementalCredentials     OctetString true  
systemFlags     INTEGER    
telephoneNumber General Telephone number DirectoryString   true
teletexTerminalIdentifier     OctetString true  
telexNumber     OctetString true  
terminalServer     OctetString    
textEncodedORAddress     DirectoryString    
thumbnailLogo     OctetString    
thumbnailPhoto     OctetString    
title Organization Title DirectoryString    
tokenGroups     OctetString true  
tokenGroupsGlobalAndUniversal   OctetString true  
tokenGroupsNoGCAcceptable   OctetString true  
unicodePwd     OctetString    
url General Web Page Address (Others) DirectoryString true  
userAccountControl Account Account options INTEGER   true
userCert     OctetString   true
userCertificate     OctetString true true
userParameters     DirectoryString    
userPassword     OctetString true  
userPrincipalName Account User logon name DirectoryString   true
userSharedFolder     DirectoryString    
userSharedFolderOther     DirectoryString true  
userSMIMECertificate     OctetString true true
userWorkstations Account Log On To/Logon Workstations DirectoryString    
uSNChanged Object Current USN INTEGER8   true
uSNCreated Object Original USN INTEGER8   true
uSNDSALastObjRemoved     INTEGER8    
USNIntersite     INTEGER    
uSNLastObjRem     INTEGER8   true
uSNSource     INTEGER8    
wbemPath     DirectoryString true  
wellKnownObjects     DNWithBinary true true
whenChanged Object Modified GeneralizedTime   true
whenCreated Object Created GeneralizedTime   true
wWWHomePage General Web page DirectoryString    





Für zusätzliche Informationen zu Active Directory Schema und Klassen verweise ich auf die entsprechenden Links.