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
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