CoNtAcT2000 15 Geschrieben 12. Januar 2022 Melden Geschrieben 12. Januar 2022 Hallo Leute, ich muss den Inhalt des Attribut "department" in ein extensionAttribute umschreiben. Nur leider gibt er mit den Inhalt von $Skript an dieser Stelle nicht aus. Hab auch versucht mit $user.department - aber auch das funktioniert mit dieser Formatierung nicht. Da mache ich wohl was falsch. $users = Get-ADUser -SearchBase "OU=x,OU=y,DC=DOMAIN,DC=LOCAL" -Filter * -Properties Department, extensionAttribute1 | Select-Object SamAccountName,Department,extensionAttribute1 foreach ($user in $users) { $String = $user.department | Out-String Write-Host Set-ADUser -Identity $user.SamAccountName -Add @{extensionAttribute1="$String"} } Ausgabe sieht dann immer wie folgt aus: Set-ADUser -Identity Username -Add System.Collections.DictionaryEntry Könnt ihr mir bitte diesbezüglich weiterhelfen? VG CoNtAcT2000 Zitieren
BOfH_666 585 Geschrieben 12. Januar 2022 Melden Geschrieben 12. Januar 2022 Was soll diese Zeile denn bewirken? Write-Host Set-ADUser -Identity $user.SamAccountName -Add @{extensionAttribute1="$String"} Ich würde das "Write-Host" an dieser Stelle entfernen. Zitieren
CoNtAcT2000 15 Geschrieben 12. Januar 2022 Autor Melden Geschrieben 12. Januar 2022 Das Write-Host ist ja nur mal dazu da die Ausgabe zu checken... Zitieren
tesso 382 Geschrieben 12. Januar 2022 Melden Geschrieben 12. Januar 2022 Was ist denn nun dein Problem? Das Set-ADUser... ausgegeben wird liegt am Write-host. Warum nimmst du nicht -whatif am set-aduser? Was steht von im ext1 Attribut drin? Evtl. ist -Replace eine bessere Wahl -Add 1 Zitieren
BOfH_666 585 Geschrieben 12. Januar 2022 Melden Geschrieben 12. Januar 2022 Also bei mir funktioniert das hier : $users = Get-ADUser -SearchBase "OU=x,OU=y,DC=DOMAIN,DC=LOCAL" -Filter * -Properties Department foreach ($user in $users) { Set-ADUser -Identity $user.SamAccountName -Add @{extensionAttribute1 = "$($User.Department)" } } Zitieren
CoNtAcT2000 15 Geschrieben 12. Januar 2022 Autor Melden Geschrieben 12. Januar 2022 Der Inhalt den ich aus user.department auslese wird an der Stelle $String nicht ausgegeben. Das ist das Problem. extensionAttribute1 ist derzeit bei jedem User leer und soll gefüllt werden mit dem derzeitigen Inhalt aus user.department Write-Host Set-ADUser -Identity $user.SamAccountName -Add @{extensionAttribute1="$String"} Eigentlich sollte die Ausgabe so aussehen: Set-ADUser -Identity Username -Add @{extensionAttribute1="BisherigerWertAus$User.department"} dann wäre das Kommando in Ordnung und ich könnte es abschicken. Am 12.1.2022 um 15:52 schrieb BOfH_666: Also bei mir funktioniert das hier : $users = Get-ADUser -SearchBase "OU=x,OU=y,DC=DOMAIN,DC=LOCAL" -Filter * -Properties Department foreach ($user in $users) { Set-ADUser -Identity $user.SamAccountName -Add @{extensionAttribute1 = "$($User.Department)" } } Mehr Habe ich genauso eben probiert: Write-Host Set-ADUser -Identity $user.SamAccountName -Add @{extensionAttribute1 = "$($User.Department)" } Habe ich probiert. Funktioniert bei mir nicht. Ausgabe: Set-ADUser -Identity Username -Add System.Collections.DictionaryEntry Zitieren
BOfH_666 585 Geschrieben 12. Januar 2022 Melden Geschrieben 12. Januar 2022 Lass doch mal bitte das Write-Host weg und teste es mit einem (oder mehreren) Test-User. Zitieren
daabm 1.397 Geschrieben 12. Januar 2022 Melden Geschrieben 12. Januar 2022 Am 12.1.2022 um 15:21 schrieb CoNtAcT2000: @{extensionAttribute1="$String"} Mehr Damit erstellst Du ein Dictionary, und das kann Write-Host nicht in einen String umsetzen. Ergo "works as designed", lass Write-Host weg. Oder lass Dir das auf andere Weise ausgeben. Zum Ausprobieren: $dict = @{extensionAttribute1="$String"} Write-Host $dict $dict Zitieren
CoNtAcT2000 15 Geschrieben 12. Januar 2022 Autor Melden Geschrieben 12. Januar 2022 Am 12.1.2022 um 16:05 schrieb BOfH_666: Lass doch mal bitte das Write-Host weg und teste es mit einem (oder mehreren) Test-User. Mehr Es funktioniert auch nicht, wenn ich das Write-Host weglasse. Fehlermeldung: Set-ADUser : add In C:\Temp\Department.ps1:4 Zeichen:1 + Set-ADUser -Identity $user.SamAccountName -Add @{extensionAttribute1 ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (TESTUSER:ADUser) [Set-ADUser], ADInvalidOperationException + FullyQualifiedErrorId : ActiveDirectoryServer:0,Microsoft.ActiveDirectory.Management.Commands.SetADUser Zitieren
Beste Lösung CoNtAcT2000 15 Geschrieben 12. Januar 2022 Autor Beste Lösung Melden Geschrieben 12. Januar 2022 So, etwas am Code rumgepfuscht, nun hat es funktioniert. Das Write-Host an der Stelle war definitiv störend. Das Umwandeln in String musste allerdings sein. clear $users = Get-ADUser -SearchBase "OU=x,OU=y,DC=DOMAIN,DC=LOCAL" -Filter * -Properties Department,extensionAttribute1,Enabled | Where-Object {$_.Enabled -like "true"}| Sort-Object -Property SamAccountName foreach ($user in $users) { # Pruefen ob Attribut Department gesetzt ist, falls nein, naechstes Objekt if ($user.Department){ # Pruefen ob extensionAttribute1 fuer den Benutzer gesetzt ist, falls ja, extensionAttribute1 zuruecksetzen if ($user.extensionAttribute1) { Set-ADUser –Identity $user.SamAccountName -Clear "extensionAttribute1" } $String = $user.Department.ToString() Write-Host Username: $user.SamAccountName Attribut1: $String # Setze extensionAttribute1 Set-ADUser -Identity $user.SamAccountName -Add @{extensionAttribute1="$String"} } } Zitieren
BOfH_666 585 Geschrieben 12. Januar 2022 Melden Geschrieben 12. Januar 2022 (bearbeitet) Am 12.1.2022 um 20:28 schrieb CoNtAcT2000: Das Umwandeln in String musste allerdings sein. Mehr Und eben das zweifle ich nach wie vor an. Wenn Du Dir mal mit Get-Member die Eigenschaften dieser Property anschaust, wirst Du feststellen, dass es bereits ein String ist. $User = Get-ADUser -Identity 'IrgendEinADUser' -Properties Department $User.Department | Get-Member bearbeitet 12. Januar 2022 von BOfH_666 Zitieren
tesso 382 Geschrieben 12. Januar 2022 Melden Geschrieben 12. Januar 2022 Das clear des Attributes kannst du dir sparen und statt add gleich replace nehmen. 1 Zitieren
CoNtAcT2000 15 Geschrieben 12. Januar 2022 Autor Melden Geschrieben 12. Januar 2022 Am 12.1.2022 um 20:50 schrieb BOfH_666: Und eben das zweifle ich nach wie vor an. Wenn Du Dir mal mit Get-Member die Eigenschaften dieser Property anschaust, wirst Du feststellen, dass es bereits ein String ist. $User = Get-ADUser -Identity 'IrgendEinADUser' -Properties Department $User.Department | Get-Member Mehr Dann probiere es mal aus. Bei mir hat er ohne das umwandeln in String den distinguished name in extensionAttribute1 geschrieben. Warum auch immer. Am 12.1.2022 um 21:15 schrieb tesso: Das clear des Attributes kannst du dir sparen und statt add gleich replace nehmen. Mehr Danke für den Hinweis, das geht natürlich auch. Zitieren
cj_berlin 1.435 Geschrieben 12. Januar 2022 Melden Geschrieben 12. Januar 2022 Am 12.1.2022 um 22:13 schrieb CoNtAcT2000: Dann probiere es mal aus. Bei mir hat er ohne das umwandeln in String den distinguished name in extensionAttribute1 geschrieben. Warum auch immer. Mehr Darum: Du versuchst den String so aufzulösen (Kopie von oben): extensionAttribute1="BisherigerWertAus$User.department" Das bedeutet für den Parser: extensionAttribute1="BisherigerWertAus$($User).department" weil für ihn der Punkt ein Begrenzungszeichen für Variablennamen ist. Und für ein AD-Objekt löst sich die Variable im String in den distinguishedName auf. Wenn Du eine Property durch String Expansion verwenden möchtest, musst Du das dem Parser explizit mitteilen: extensionAttribute1="BisherigerWertAus$($User.department)" 1 Zitieren
daabm 1.397 Geschrieben 13. Januar 2022 Melden Geschrieben 13. Januar 2022 Am 12.1.2022 um 22:19 schrieb cj_berlin: Wenn Du eine Property durch String Expansion verwenden möchtest, musst Du das dem Parser explizit mitteilen: extensionAttribute1="BisherigerWertAus$($User.department)" Mehr ...weswegen es oft eine gute Idee für den Einstieg ist, sich solche Variablen explizit vorher zusammenzubauen, statt sie in "Hugo$($Sekt.Volume)" direkt einzubauen 1 Zitieren
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.