Saturday, March 28, 2015

Umgib mich - Variablen für AD-Pfade


Hallo miteinander.

Wenn Ihr mit Computerstart- oder Anmeldeskripts arbeitet, verwendet Ihr darin bestimmt gelegentlich %computername% oder %userdomain% und ähnliches.

Die Herausforderung

Wir arbeiten häufig mit Trusts. Dabei ist dann natürlich %userdomain% nicht die Domäne des Computers. Also möchten wir zusätzliche Variablen %computerdomain% und %computerdnsdomain% erstellen.

Außerdem haben wir festgestellt, dass in unseren Skripts auch relativ häufig auf die AD-Objekte von Domäne, Computer oder Benutzer zugegriffen wird. Normalerweise holt man sich die Domäne aus RootDSE. Computer und Benutzer muss man aber im AD suchen. Und eine Suchanfrage erzeugt natürlich Last auf dem Domain Controller – besser wäre es, wenn ich also direkt binden kann. Dazu brauche ich den Distinguished Name meiner Objekte.
Wenn ich diesen Distinguished Name als Umgebungsvariable bereitstelle, kann er beliebig verwendet werden, und niemand muss mehr danach suchen.

Konkret wollen wir folgende Variablen bereitstellen:
  • ComputerDomain: Der Netbios-Name der Computerdomäne
  • ComputerDNSDomain: Der FQDN der Computerdomäne
  • ComputerDomainDN: Der Distinguished Name der Computerdomäne
  • ComputerNameDN: Der Der Distinguished Name des Computerkontos
  • UserDomainDN: Der Distinguished Name der Benutzerdomäne
  • UserNameDN: Der Distinguished Name des Benutzerkontos
  • UserSID: Der Security Identifier des Benutzerkontos 
Die UserSID brauchen wir eigentlich nicht, aber wenn wir schon mal dabei sind :)


 



Woher nehmen?

Nachdem wir unsere Variablenliste festgelegt haben, müssen wir erst mal klären, wo wir diese Informationen eigentlich finden… Randbedingung übrigens: Wir wollen kein Skript dafür schreiben, sondern wir wollen das alles mit nativer Gruppenrichtlinien-Technik lösen!


ComputerDomain


Der Netbios-Domänenname steht uns in Group Policy Preferences (GPP) als vordefinierte Variable %DomainName% zur Verfügung. Die Liste der vordefinierten Variablen könnt Ihr in allen Eingabefeldern mit F3 abrufen. 

ComputerDNSDomain


Der FQDN der Computerdomäne steht uns in WMI zur Verfügung, und zwar in der Klasse Win32_Computersystem in der Eigenschaft Domain. 

ComputerDomainDN

Den DN der Computerdomäne finden wir in RootDSE in der Eigenschaft defaultNamingContext.

ComputerNameDN

Den DN des Computers finden wir leider in keinem lokalen Attribut von was auch immer. Den müssen wir also tatsächlich per LDAP gegen %ComputerDomainDN% nach sAMAccountName=%computername%$ suchen (das Dollarzeichen hinten kennzeichnet Computeraccounts und muss mit angegeben werden).

UserDomainDN

Den DN der Benutzerdomäne können wir nicht aus RootDSE ermitteln – dort steht nur die Computerdomäne zur Verfügung. Hier müssen wir per LDAP-Abfrage gegen %userdnsdomain% den DN der Domäne ermitteln.

UserNameDN

Auch den DN des Benutzers finden wir in keiner lokalen Eigenschaft. Daher suchen wir per LDAP gegen %UserDomainDN% nach sAMAccountName=%username%.

UserSID

Die SID wiederum haben wir – wie auch die Computerdomäne – als vordefinierte Variable in GPP zur Verfügung.

Wie umsetzen?

Wer schon einmal mit GPP gearbeitet hat und dabei die Zielgruppenadressierung verwendete, der ahnt sicher schon, wie wir unsere Variablen erstellen J

Wir erstellen eine GPO, die wir mit der Domäne direkt verknüpfen – sie soll ja für alle Benutzer und Computer diese Variablen erstellen. Sicherheitsfilter bleibt Authentifizierte Benutzer, und einen WMI-Filter brauchen wir auch nicht. 


Abbildung 1: GPO mit Domäne verknüpfen

Alle Umgebungsvariablen erstellen wir mit Hilfe von Einstellungen – Windows-Einstellungen – Umgebung.


Abbildung 2: Umgebungsvariablen für Computer


Abbildung 3: Umgebungsvariablen für Benutzer

Die einzelnen Variablen und die Einstellungen dazu findet Ihr in den folgenden Abschnitten.

ComputerDomain

Hier gibt es nicht viel zu beachten. Neue Variable erstellen, Name und Wert angeben, fertig :)

Abbildung 4: Variable %ComputerDomain% erstellen

Achtet bei den Computervariablen darauf, dass sie als Systemvariable angelegt werden – sonst landen sie hinterher im Profil von SYSTEM (HKEY_USERS\S-1-5-18)… Und als Aktion verwenden wir immer Aktualisieren – damit funktioniert das auch nach der Migration des Computers in eine andere Domäne.

ComputerDNSDomain

Hier müssen wir etwas mehr arbeiten. Zunächst erstellen wir ebenfalls eine neue Variable, geben Name und Wert an.

Abbildung 5: Variable %ComputerDNSDomain% erstellen

Der Wert hier ist wiederum eine Umgebungsvariable. Allerdings existiert diese noch gar nicht, und sie ist auch nur temporär innerhalb der GPP-Verarbeitung vorhanden. Um sie mit einem Inhalt zu füllen, aktivieren wir unter Gemeinsame Optionen die Zielgruppenadressierung auf Elementebene (Item Level Targeting, ILT).

Abbildung 6: Zielgruppenadressierung aktivieren
Nach einem Klick auf Zielgruppenadressierung… legen wir den Filter fest.




Abbildung 7: WMI-Filter zur Abfrage der Domäne

Dieser Filter ermittelt die Eigenschaft Domain von Win32_Computersystem und speichert ihren Wert in der temporären Variablen ILT_ComputerDNSDomain. Und genau diese Variable haben wir vorher als Inhalt für ComputerDNSDomain festgelegt.

ComputerDomainDN

Auch hier geben wir – wie in der Variablenübersicht oben zu sehen – Name und Wert an. Der Wert wiederum ist eine Variable, deren Inhalt mit der Zielgruppenadressierung ermittelt wird. Da wir RootDSE verwenden wollen, erstellen wir eine LDAP-Abfrage.

Abbildung 8: LDAP-Abfrage für den DN der Computerdomäne

Wir binden an RootDSE und holen uns die Eigenschaft defaultNamingContext als Inhalt für ILT_ComputerDomainDN.

ComputerNameDN

Den DN des Computers holen wir uns mit der gleichen Methode wie den DN der Domäne. Allerdings müssen wir jetzt direkt im AD suchen – die bisherigen Methoden greifen dagegen alle nur auf lokale Ressourcen zu.

Abbildung 9: DN des Computers in AD ermitteln

Wir binden hier direkt an die Domäne und suchen nach dem Computerkonto. Die Eigenschaft distinguishedName speichern wir in einer temporären Variablen, die wir als Inhalt von ComputerNameDN verwenden. Bitte das Dollarzeichen $ beim Filter nicht vergessen…

UserDomainDN

Den DN der Benutzerdomäne müssen wir ebenfalls im AD suchen, da RootDSE ja nur den DN der Computerdomäne enthält. Beim Erstellen solltet Ihr zudem darauf achten, dass Ihr eine Benutzervariable erstellt – sonst wird das auf Terminal Servern oder bei der Benutzerumschaltung komisch…

Abbildung 10: DN der Benutzerdomäne in AD ermitteln

Wir binden gegen %LogonDomain%, das ist der Netbios-Name der Benutzerdomäne, und speichern den distinguishedName.

UserNameDN

Auch hier müssen wir wieder per LDAP nach dem DN suchen. Die Abfrage ist fast identisch mit der für UserDomainDN.

Abbildung 11: DN des Benutzerkontos in AD ermitteln

UserSID

Die Lösung dieser Variablenzuweisung sei dem geneigten Leser überlassen – mein Tipp: Drücke F3 :)

Last Words

Das war’s auch schon – nach der nächsten Gruppenrichtlinien-Aktualisierung stehen uns die neuen Variablen zur Verfügung.



Abbildung 12: Neu erstellte Computervariablen

Abbildung 13: Neu erstellte Benutzervariablen

(Ja, ich weiß, dass man .local nicht mehr verwenden sollte…)

Viel Spaß beim Nachmachen und bis zum nächsten Post!

No comments:

Post a Comment