emeriks
Goto Top

PowerShell- ADuser - Domaincontroller schlussfolgern

Hi,
hat jemand ne Idee, wie man im PowerShell von einem ADUser-Objekt den Domaincontroller bekommt, über welchen dieses abgefragt oder erstellt wurde?

Also, z.B. mit
$User = Get-ADuser "Peter Müller"  
bekomme ich ein Objekt vom Typ Microsoft.ActiveDirectory.Management.ADUser

Für spätere Operationen mit diesem Objekt brauche ich den Domaincontroller.

$User | FL *
liefert mir keine Eigenschaft, über welche ich auf den verwendeten DC schlussfolgern könnte.

E.

Content-Key: 460112

Url: https://administrator.de/contentid/460112

Printed on: April 20, 2024 at 05:04 o'clock

Member: SlainteMhath
SlainteMhath Jun 07, 2019 updated at 12:47:30 (UTC)
Goto Top
Moin,

mEn hast du da keine Chance. der DC ist für das User Objekt vollkommen irrelevant. Die DCs einer Domain bekommst du mit Get-AdDomain oder Get-AdDomainController - falls dir das was hilft.

lg,
Slainte

/EDIT:
liefert mir keine Eigenschaft, über welche ich auf den verwendeten DC schlussfolgern könnte.
Versuchs mal mit
Get-AdUser -Properties * | gm
Das zeigt dir alle EIgenschaften die PS vom User Objekt kennt.
Mitglied: 139920
139920 Jun 07, 2019 updated at 13:15:59 (UTC)
Goto Top
Get-ADDomainController -Discover -NextClosestSite | select -First 1
Member: emeriks
emeriks Jun 07, 2019 at 12:57:16 (UTC)
Goto Top
Zitat von @SlainteMhath:
der DC ist für das User Objekt vollkommen irrelevant.
Mitnichten! Wenn man nicht in die Falle mit der Replikationsverzögerung laufen will, dann muss man alle Operation ein einem Objekt über denselben DC erledigen.

Die DCs einer Domain bekommst du mit Get-AdDomain oder Get-AdDomainController - falls dir das was hilft.
Das ist mir klar. Ich brauche es jedoch "reverse". Nicht über den DC an das Objekt sondern über das Objekt an den DC.
Member: emeriks
emeriks Jun 07, 2019 at 12:58:10 (UTC)
Goto Top
Zitat von @139920:
Get-ADDomainController -Discover | select -First 1
Das nütz mir doch nichts. Siehe meine Antwort zu @SlainteMhath
Mitglied: 139920
139920 Jun 07, 2019 updated at 13:17:52 (UTC)
Goto Top
Zitat von @emeriks:

Zitat von @139920:
Get-ADDomainController -Discover | select -First 1
Das nütz mir doch nichts. Siehe meine Antwort zu @SlainteMhath
Doch, Get-ADUser benutzt die selbe Methode zum ermitteln des DCs welchen er abfragt, s. Doku zu Get-ADUser

https://activedirectoryfaq.com/2016/05/powershell-finding-the-next-close ...
Member: LeeX01
LeeX01 Jun 07, 2019 at 19:48:09 (UTC)
Goto Top
hi emeriks,

anstatt später abzufragen über welchen Server die anfrage gestellt wurde gibt doch gleich bei der Anfrage -server an dann ist es klar. Falls du das noch automatisiert brauchst fragst halt alle DCs der Domain ab und wählst dir einen random.

Grüße
Member: emeriks
emeriks Jun 09, 2019 at 10:30:32 (UTC)
Goto Top
Ihr versteht mich offenbar nicht.
Ich weiß, dass man beim Abfrage mit Get-ADUser oder Get-ADObject explizit einen DC benennen kann.

Was aber nützt mir das, wenn ich von einer anderen Quelle, welche ich nicht beeinflussen kann, nur solch ein ADUser-Objekt bekomme?
Mitglied: 139920
139920 Jun 09, 2019, updated at Jun 10, 2019 at 08:29:39 (UTC)
Goto Top
Nur mit dem Objekt von Get-AdUser gar nicht! Das beinhaltet keinerlei Info von welchem DC die Daten abgefragt wurden. Wenn du also selbst die Abfrage von Get-Aduser nicht beeinflussen bzw. anderweitig die Abfrage selbst in die Hand nehmen kannst hast du Pech.
Member: LeeX01
LeeX01 Jun 09, 2019 at 16:30:21 (UTC)
Goto Top
Es ist schon ziemlich abstrakt und schwammig geschrieben aber wenn ich dich richtig verstehe bekommst du ein Array (vielleicht aber auch einfach nur ein Textfile) mit ADuser-Objekten oder deren Namen und möchtest dich dann auf den DC verbinden der diese erstellt hat?
Member: Daemmerung
Daemmerung Jun 09, 2019 at 21:37:09 (UTC)
Goto Top
Ja, das wird er wohl gemeint haben. Er kann nicht beeinflussen, von wo die vorherigen Operationen durchgeführt wurden, will aber darauf aufbauend weiterarbeiten.

Also bei Exchange-Objekten kannst du mittelst Get-AdPermission -owner -identity <Username> ermitteln, welcher DC der Eigentümer ist. Da ich zuhause keine AD-Umgebung habe, kann ich nicht prüfen, ob das mit Get-ACL auch funktioniert. Ich weiß aber, dass der dort irgendein Eigentümer steht. Aber vielleicht hilft dir das ja schon etwas.

Viele Grüße
Toni
Member: emeriks
emeriks Jun 11, 2019 at 06:17:32 (UTC)
Goto Top
Zitat von @LeeX01:
Es ist schon ziemlich abstrakt und schwammig geschrieben
Nein, ist es nicht.

(vielleicht aber auch einfach nur ein Textfile)
Ein Textfile? Mit einem Objekt? Wie soll das gehen?
Nein, das meine ich nicht.
Member: emeriks
emeriks Jun 11, 2019 updated at 08:23:00 (UTC)
Goto Top
Zitat von @Daemmerung:
Ja, das wird er wohl gemeint haben. Er kann nicht beeinflussen, von wo die vorherigen Operationen durchgeführt wurden, will aber darauf aufbauend weiterarbeiten.
Ja, daran ist doch auch nichts seltsames. Man muss ein Script bereitstellen, welches von einer Dritten Stelle verwendet wird, mit der Vorgabe, dass ein ADUser-Objekt übergeben wird. Oder CmdLet entwickeln, welchem nach Vorgabe nur ein ADUser-Objekt übergeben werden soll.

Also bei Exchange-Objekten kannst du mittelst Get-AdPermission -owner -identity <Username> ermitteln, welcher DC der Eigentümer ist. Da ich zuhause keine AD-Umgebung habe, kann ich nicht prüfen, ob das mit Get-ACL auch funktioniert. Ich weiß aber, dass der dort irgendein Eigentümer steht. Aber vielleicht hilft dir das ja schon etwas.
Nein, nicht wirklich.
Es geht nicht um den Besitzer.

Denkt größer! Ein großes AD mit vielen, vielen DC's und AD-Standorten. Selbst bei schnellster Replikation kann es Minuten dauern, bis der letzte DC eine Änderung mitbekommen hat.
Wenn man jetzt ein AD-Objekt erstellt oder ändert und dann in einem zweiten Schritt weitere Änderungen vornehmen will/muss, welche direkt auf die unmittelbar zuvor erfolgten Änderungen aufbauen sollen, dann kann man entweder eine Kunstpause einlegen, nach welcher man vermuten kann, dass mit hoher Wahrscheinlichkeit alle vorherigen Änderungen auf alle DC's repliziert wurden oder man arbeitet am besten gleich mit dem selben DC weiter, über welchen die vorherigen Änderungen erfolgt sind.
Member: Daemmerung
Daemmerung Jun 11, 2019 at 08:17:30 (UTC)
Goto Top
Ich habe jetzt selbst mal bisschen rumgeschaut. Get-ACL hilft hier tatsächlich nicht weiter. Spontan fällt nur die Möglichkeit ein, alle DCs nach dem User zu durchsuchen und einen passenden zu ermitteln. Sollte es sich um eine Änderung haneln, kann man zusätzlich das WhenChanged-Attribut vergleichen und dort den jüngsten Wert ermiteln.
Für diese Prozedur könntes du ein passendes CMdLet schreiben.

Eine andere Möglichkeit fällt mir da nun nicht mehr ein.
Member: emeriks
emeriks Jun 11, 2019 at 08:25:52 (UTC)
Goto Top
Zitat von @Daemmerung:
kann man zusätzlich das WhenChanged-Attribut vergleichen und dort den jüngsten Wert ermiteln.
Würgarrounds habe ich schon selbst einige probiert. Diese funktionieren scheinbar auch. Bis zum nächsten Spezialfall ... face-wink

Meine Frage war aber ganz konkret nach dieser Ableitung des DC's aus dem ADUser-Objekt.
Member: LeeX01
LeeX01 Jun 11, 2019 at 08:49:44 (UTC)
Goto Top
Also bei Exchange-Objekten kannst du mittelst Get-AdPermission -owner -identity <Username> ermitteln, welcher DC der Eigentümer ist. Da ich zuhause keine AD-Umgebung habe, kann ich nicht prüfen, ob das mit Get-ACL auch funktioniert. Ich weiß aber, dass der dort irgendein Eigentümer steht. Aber vielleicht hilft dir das ja schon etwas.
Das zeigt dir nur den Owner

(vielleicht aber auch einfach nur ein Textfile)
Ein Textfile? Mit einem Objekt? Wie soll das gehen?
Nein, das meine ich nicht.
Das Objekt an sich natürlich nicht aber einen eindeutigen Identifizierer, bei einem User wäre da sdie SID

Es gibt Lösungen, tauchen wir mal etwas tiefer ein:
Auch wenn uns das AD die Informationen so nicht zur Verfügung stellt weil es das so nicht speichert kommen wir an unser gewünschte Ziel. Alle DCs sind in einer Multimasterumgebung im AD und tauschen sich über USNs aus um die Replikation einzuleiten. Ein User im AD ist letztlich ein Objekt mit bestimmen Eigenschaften. Wenn sich bei einem User auch viel ändern kann, die 'objectClass' wird es nicht tun. Wenn wir das jetzt verknüpfen wissen wir, wer die ObjectClass definiert muss das Objekt angelegt haben. Wenn du in die Metadaten deiner Replikation nach deinem User schaust wirst du den DC finden der den User erstellt hat. Falls der DC nicht mehr existiert (wovon ich aber nach deiner Beschreibung nicht ausgehe) findest du natürlich nur noch die GUID.


repadmin /showobjmeta 'DC-Name' 'User-DN'

et voila
Member: emeriks
emeriks Jun 11, 2019 at 09:41:10 (UTC)
Goto Top
Zitat von @LeeX01:
Das Objekt an sich natürlich nicht aber einen eindeutigen Identifizierer, bei einem User wäre da sdie SID
Denkfehler.
Ich rede nicht vom AD-Objekt sondern vom PowerShell-Objekt.
Member: LeeX01
LeeX01 Jun 11, 2019 at 09:58:45 (UTC)
Goto Top
Zitat von @emeriks:

Zitat von @LeeX01:
Das Objekt an sich natürlich nicht aber einen eindeutigen Identifizierer, bei einem User wäre da sdie SID
Denkfehler.
Ich rede nicht vom AD-Objekt sondern vom PowerShell-Objekt.

Wie du schon geschrieben hast bekommst du durch die Abfrage ein Objekt vom Typ Microsoft.ActiveDirectory.Management.ADUser, also ein AD Objekt. Dieses AD Objekt (in der Powershell) hat das Attribut (member) objectSid.
Member: emeriks
emeriks Jun 11, 2019 at 10:07:51 (UTC)
Goto Top
@LeeX01, lass es bitte gut sein. Es hilft hier nicht weiter. Danke trotzdem.