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-Key: 287530

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

Printed on: April 25, 2024 at 11:04 o'clock

Mitglied: 122990
122990 Nov 05, 2015 updated at 09:27:45 (UTC)
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
Member: teslajr
teslajr Nov 05, 2015 at 12:34:19 (UTC)
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
Mitglied: 122990
122990 Nov 05, 2015 at 12:38:23 (UTC)
Goto Top
Du musst die Daten bei beiden expandieren sonst vergleicht Compare-Object auch die Datentypen und Eigenschaften
select -Expand SamAccountName
Member: teslajr
teslajr Nov 05, 2015 at 15:12:33 (UTC)
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
Mitglied: 122990
122990 Nov 05, 2015 updated at 15:20:32 (UTC)
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.
Member: teslajr
teslajr Nov 23, 2015 at 06:18:40 (UTC)
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