teslajr
Goto Top

Powershell - AD aus XML updaten

Hallo Leute

Ich habe eine xml-Datei, in welcher alle Active Directory Benutzer drin sind, bei Unterschieden soll die AD aus xml angepasst werden.

Die XML kann ich lesen ;
$xml = [xml](get-content -Encoding UTF8 d:\adUser.xml)
$xml.Personal.Mitarbeiter

Hier lese/ändere ich die Abteilung:
$testusers = Get-ADUser -filter * -SearchBase "OU=test"  
foreach($testuser in $testusers)
{
    // if statement ?
    $testuser.title = "Dr."  
    Set-ADUser -Instance $testuser
}

Ich weiss nicht wie ich diese zwei "Datenmengen" vergleichen kann,
wenn zum Beispiel ein User von Dr. zum Prof. Dr. wird
(ich bin es offenbar nicht face-smile)

Danke & Gruss

Content-ID: 287530

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

Ausgedruckt am: 22.11.2024 um 08:11 Uhr

122990
122990 05.11.2015 aktualisiert um 10:27:45 Uhr
Goto Top
Moin,
lade jeweils die Eigenschaften der XML und aus dem UserObject mit select-object in ein Objekt, und diese beiden Objekte vergleichst du dann mit Compare-Object gibt es beim Ergebnis einen Unterschied machst du ein Update aller Eigenschaften des aktuellen Users aus der XML.

Willst du einzelne Eigenschaften auf Veränderung prüfen um nur diese upzudaten, musst du sie mit einer Schleife durchlaufen und auf Gleichheit prüfen.

Alle Member einer Eigenschaft bekommst du mit gm -Membertype Noteproperty für das AD Objekt und mit gm -Membertype Property für das XML-Objekt, darüber eine Schleife gelegt, fertig.

Gruß grexit
teslajr
teslajr 05.11.2015 um 13:34:19 Uhr
Goto Top
Hallo grexit

Vielen Dank, ich glaube deine Logik verstanden zu haben, jedoch kämpfe ich mit dem code

ich bin mich jetzt am hocharbeiten, aber ohne erfolg.
gebe ich $xmldata und $user einzeln aus, zeigen sie unterschiedliche werte, aber mit compare-object wird mir nichts angezeigt

$xml = [xml](get-content -Encoding UTF8 d:\aduser.xml)
$xmlData = $xml.Personal.Mitarbeiter | Where-Object {$_.Initialen -eq 'user1'} |Select-Object Initialen  

$user = Get-ADUser -filter * -SearchBase "OU=test" | Where-Object {$_.SamAccountName -eq 'user2'} | Select-Object SamAccountName  

Compare-Object $xmlData $user


Danke & Gruss
122990
122990 05.11.2015 um 13:38:23 Uhr
Goto Top
Du musst die Daten bei beiden expandieren sonst vergleicht Compare-Object auch die Datentypen und Eigenschaften
select -Expand SamAccountName
teslajr
teslajr 05.11.2015 um 16:12:33 Uhr
Goto Top
Danke, das hat funktioniert, der Unterschied wird angezeigt.

Jedoch, wie überschreibe ich jetzt den Ziel-Wert welcher unterschiedlich ist?

Compare-Object $xmlData >>>>> $user

Danke & Gruss
122990
122990 05.11.2015 aktualisiert um 16:20:32 Uhr
Goto Top
Jedoch, wie überschreibe ich jetzt den Ziel-Wert welcher unterschiedlich ist?
Hab ich doch oben schon geschrieben... zum Überprüfen von Einzelwerten musst du statt mit Compare-Object zu arbeiten eine Schleife über die Properties bauen und dann mit der jeweiligen Eigenschaft des AD Objekts vergleichen, dann kannst ein Set-ADUser maxmuster -Replace @{"Eigenschaft"="Wert"} machen.
teslajr
teslajr 23.11.2015 um 07:18:40 Uhr
Goto Top
Hallo Grexit

Ich kann den Vergleich in Ad nicht mit Set-außer kombinieren, nach langem versuchen...

Wie sieht so eine schleife aus?
(Grober code)

Danke & Gruss