Jump to content

Powershell Set-AdUser extensionAttribute


Direkt zur Lösung Gelöst von CoNtAcT2000,
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

 

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

 

 

Link zu diesem Kommentar

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.

vor 3 Minuten 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)" }
}

 

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

 

Link zu diesem Kommentar
vor 2 Stunden schrieb CoNtAcT2000:
@{extensionAttribute1="$String"}

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

 

Link zu diesem Kommentar
vor 2 Stunden schrieb BOfH_666:

Lass doch mal bitte das Write-Host weg und teste es mit einem (oder mehreren) Test-User.

 

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

 

Link zu diesem Kommentar
  • Beste Lösung

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"}
    }
}

 

 

Link zu diesem Kommentar
vor 23 Minuten schrieb CoNtAcT2000:

Das Umwandeln in String musste allerdings sein.

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 von BOfH_666
Link zu diesem Kommentar
vor einer Stunde 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

 

Dann probiere es mal aus. Bei mir hat er ohne das umwandeln in String den distinguished name in extensionAttribute1 geschrieben. Warum auch immer.

 

vor 57 Minuten schrieb tesso:

Das clear des Attributes kannst du dir sparen und statt add gleich replace nehmen. 

 

Danke für den Hinweis, das geht natürlich auch. :thumb1:

Link zu diesem Kommentar
vor 2 Minuten 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.

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)"

;-) 

Link zu diesem Kommentar
vor 19 Stunden schrieb cj_berlin:

Wenn Du eine Property durch String Expansion verwenden möchtest, musst Du das dem Parser explizit mitteilen:

extensionAttribute1="BisherigerWertAus$($User.department)"

...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 :-)

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...