lorsumalpha
Goto Top

Active Directory: Mit Powershell ein Extensionattribut erweitern

Moin zusammen,
ich möchte ein Script schreiben, welches erst ein extensionAttribute10 ausgibt und dieses um einen Wert erweitert.
Zusätzlich würde ich gerne einen bestimmten Eintrag entfernen. Meine Idee war, das ganze in ein String zu stecken, am Ende zu erweitern mit Wert X und danach nach Wert Y zu suchen im String und diesen zu entfernen.

Das ist mein aktueller Code:
$oldstring = @(Get-ADUser -Identity $ThisUser -Properties extensionAttribute10 | Select extensionAttribute10)

Testwerte:
$ThisUser = "Testaccount01"  
@{extensionAttribute10=Computer01, Computer02}
$Erweiterung = "Computer03"  
$Entfernt = "Computer01"  

Hat einer von euch eine Idee dazu? Gibt es vielleicht einen eleganteren Weg

Content-ID: 3853459106

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

Ausgedruckt am: 25.11.2024 um 18:11 Uhr

3803037559
Lösung 3803037559 06.09.2022 aktualisiert um 10:11:48 Uhr
Goto Top
Moin.
$ThisUser = "Testaccount01"  
$Erweiterung = "Computer03"  
$Entfernt = "Computer01"  
$user = Get-ADUser -Identity $ThisUser -Properties extensionAttribute10
$newAttribute = ([string[]]($user.extensionAttribute10 -split '[,\s]+' | ?{$_ -ne $entfernt}) + $Erweiterung) -join ','  
Set-ADUser $thisUser -Replace @{extensionAttribute10=$newAttribute}
Gibt es vielleicht einen eleganteren Weg
Sinniger wäre es dafür gleich ein MultiValue-Attribut im AD-Schema zu erstellen, die wurden nämlich genau für sowas geschaffen. Damit lassen sich per Set-ADUser und -Add und -Remove Parameter nämlich direkt die Items hinzufügen und entfernen, ohne das man mit einem Pseudo-Array hantieren muss.

Cheers
certguy
lorsumalpha
lorsumalpha 06.09.2022 um 10:12:08 Uhr
Goto Top
Zitat von @3803037559:

Moin.
$ThisUser = "Testaccount01"  
$Erweiterung = "Computer03"  
$Entfernt = "Computer01"  
$user = Get-ADUser -Identity $ThisUser -Properties extensionAttribute10
$newAttribute = ([string[]]($user.extensionAttribute10 -split '[,\s]+' | ?{$_ -ne $entfernt}) + $Erweiterung) -join ','  
Set-ADUser $thisUser -Replace @{extensionAttribute10=$newAttribute}
Gibt es vielleicht einen eleganteren Weg
Sinniger wäre es dafür gleich ein MultiValue-Attribut im AD-Schema zu erstellen, die wurden nämlich genau für sowas geschaffen. Damit lassen sich per Set-ADUser und -Add und -Remove Parameter nämlich direkt die Items hinzufügen und entfernen, ohne das man mit einem Pseudo-Array hantieren muss.

Cheers
certguy

Perfekt hat funktioniert danke dir!
lorsumalpha
lorsumalpha 06.09.2022 aktualisiert um 10:26:31 Uhr
Goto Top
@3803037559
Habe das nun probiert, bei einem User, der mehrere Einträge im extensionAttribute10 hat.
Hier meckert er rum, dass er nur einen Wert enthalten kann.
$ThisUser = "Test"  
$Erweiterung = "Computer02"  
$Entfernt = "Computer01"  
$user = Get-ADUser -Identity $ThisUser -Properties extensionAttribute10
$newAttribute = [string[]]($user.extensionAttribute10 -split '[,\s]+' | ?{$_ -ne $entfernt}) + $Erweiterung  
Set-ADUser $thisUser -Replace @{extensionAttribute10=$newAttribute}

Fehlermeldung:
Set-ADUser : Für ein Attribut, das nur einen Wert enthalten kann, wurden mehrere Werte angegeben
In Zeile:1 Zeichen:1
+ Set-ADUser $thisUser -Replace @{extensionAttribute10=$newAttribute}
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (Test:ADUser) [Set-ADUser], ADException
    + FullyQualifiedErrorId : ActiveDirectoryServer:8321,Microsoft.ActiveDirectory.Management.Commands.SetADUser
Hast du da eine Idee?
3803037559
3803037559 06.09.2022 aktualisiert um 10:36:47 Uhr
Goto Top
Du hast nen Copy n Paste-Fehler ... Kopiere den Code nochmal dir fehlt das Joinen in Zeile5 !
lorsumalpha
lorsumalpha 06.09.2022 um 10:47:51 Uhr
Goto Top
@3803037559 Oh jetzt aufgefallen - Danke ^^; komischerweise haut er den ersten Eintrag des Attributes aber raus
3803037559
3803037559 06.09.2022 aktualisiert um 10:51:31 Uhr
Goto Top
Zitat von @lorsumalpha:

komischerweise haut er den ersten Eintrag des Attributes aber raus
Nix komisch... das wolltest du ja hiermit :
$Entfernt = "Computer01"
Und genau das tut er face-wink
Ich zitiere
Zusätzlich würde ich gerne einen bestimmten Eintrag entfernen.

Einfach erst mal den Code verstehen bevor man ihn anwendet! Dann ist auch nichts komisch!!

Sind wir hier auf nem Basar oder wat?! 😂