Jump to content

Powershell Set-AdUser extensionAttribute


Go to solution Solved by CoNtAcT2000,

Recommended Posts

 

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 to comment

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 to comment
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 to comment
  • Solution

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 to comment
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

 

Edited by BOfH_666
Link to comment
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 to comment
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)"

;-) 

  • Thanks 1
Link to comment
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 :-)

  • Like 1
Link to comment

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...