none
Set-ADSUser: Daten in ein neues Attribut einfügen. RRS feed

  • Frage

  • Hallo zusammen,

    ich bin noch etwas neu. Ich habe nun in dem AD-Schema für Users ein neues Attribut eingefügt. Nennen wir es "iav-Test2".


    Im ADSI-Edit kann ich dieses Attribut anzeigen und auch erfolgreich editieren. Soweit so gut.
    Nun habe ich eine csv-datei in welcher auch das Attribut "Costcenter" vorkommt. Und genau diesen Wert (z.B. 99999) in der entsprechenden Spalte möchte ich nun in das Attribut mit Set-ADUser eintragen.

    Dazu habe ich ein kleines Skript geschrieben:

    # Update Users in AD
    # Import erfolgt über CSV-Datei
    # Vorraussetzung: Die User müssen bereits vorhanden sein
    #
    # Datum: 05.01.2012
    # Geändert Heinz Gierke

    Import-module ActiveDirectory
    Import-CSV "C:\testcsv.csv" | % {
    $User = $_.UserName
    $ID = $_.EmployeeID
    $Comp = $_.Company
    $CC = $_.Costcenter
    Set-ADUser $User -employeeID $ID -company $Comp -iavTest2 $CC
    }

    Die Importdatei dazu sieht folgendermaßen aus:

    UserName,EmployeeID,Company,Costcenter
    hpaul,12345,IAV-GmbH,85110
    meier,9999,test-gmbh,99999
    a,4711,C4D,85120.

    Beim Aufruf erhalte ich folgende Fehlermeldung:

    PS C:\Windows\system32> C:\Users\hgierke\Documents\Meine Skripts\UpdExistUsers.ps1
    Set-ADUser : A parameter cannot be found that matches parameter name 'iavTest2'.
    At C:\Users\hgierke\Documents\Meine Skripts\UpdExistUsers.ps1:15 char:58
    + Set-ADUser $User -employeeID $ID -company $Comp -iavTest2 <<<<  $CC
        + CategoryInfo          : InvalidArgument: (:) [Set-ADUser], ParameterBindingException
        + FullyQualifiedErrorId : NamedParameterNotFound,Microsoft.ActiveDirectory.Management.Commands.SetADUser

    Hat jemand von Euch dazu eine Idee, wie ich ein neues Attribut mit Set-ADUser ansprechen kann?

    Danke schon im voraus.

    Heinz

    Dienstag, 10. Januar 2012 12:19

Antworten

Alle Antworten

  • Teste doch mal:

    $userobj=([adsisearcher]"samaccountname=$user").FindOne().GetDirectoryEntry()
    $userobj.iavTest2 = $CC
    $userobj.CommitChanges()
    

    Grüße, Denniver


    Blog: http://bytecookie.wordpress.com

    Hilf mit und markiere hilfreiche Beiträge als "Hilfreich" und Beiträge die deine Frage ganz oder teilweise beantwortet haben als "Antwort".

    Dienstag, 10. Januar 2012 13:05
    Moderator
  • Hallo Denniver,

    das sieht sehr gut aus. Wenn ich jetzt auch noch diese Fehlermeldung wegbekommen würde,
    wäre es sogal optimal und ich bin am Ziel und kann das Skript fertigmachen.

    Fehlermeldung:

    You cannot call a method on a null-valued expression.
    At C:\Users\hgierke\Documents\Meine Skripts\UpdExistUsersUserObj.ps1:16 char:76
    + $userobj=([adsisearcher]"samaccountname=$user").FindOne().GetDirectoryEntry <<<< ()
        + CategoryInfo          : InvalidOperation: (GetDirectoryEntry:String) [], RuntimeException
        + FullyQualifiedErrorId : InvokeMethodOnNull

    Hast Du dafür eine Idee.

    Grüße, Heinz

    Dienstag, 10. Januar 2012 13:28
  • Diese Fehlermeldung kommt nur, wenn findone() keinen User gefunden hat. Dann wird die folgende Methode GetDirectoryEntry() ohne einen Wert aufgerufen, also mit einem "null-value". Daher die Fehlermeldung.

    Ein Try/Catch schafft da Abhilfe:

    try {$userobj=([adsisearcher]"samaccountname=$user").FindOne().GetDirectoryEntry()}
    catch { write-host "Fehler beim Abrufen des AD-Objektes für den Usernamen > $user <."}
    

    Du solltest aber trotzdem mal schauen warum einer der Usernamen nicht gefunden wird.

    Grüße, Denniver


    Blog: http://bytecookie.wordpress.com

    Hilf mit und markiere hilfreiche Beiträge als "Hilfreich" und Beiträge die deine Frage ganz oder teilweise beantwortet haben als "Antwort".

    Dienstag, 10. Januar 2012 13:51
    Moderator
  • Hallo Denniver,

    dass ist leider bei uns ganz normal. Die Originaldatei enthält mehr als 6000 Datensätze. Da kann es schon einmal vorkommen, dass ein User (noch?) nicht in der AD ist.

    Wie schon gesagt ich noch etws neu. Gibt es eine Möglichkeit, wenn ein User nicht in der AD ist,
    diesen zu "überlesen" und dann zum nächsten Datensatz zu gehen?

    Das ist vielleicht etwas "antik" gedacht, müsste doch aber gehen - oder?

    Grüße

    Heinz

    Dienstag, 10. Januar 2012 14:36
  • Sicher, lass catch {} einfach leer.

    Grüße, Denniver


    Blog: http://bytecookie.wordpress.com

    Hilf mit und markiere hilfreiche Beiträge als "Hilfreich" und Beiträge die deine Frage ganz oder teilweise beantwortet haben als "Antwort".
    Dienstag, 10. Januar 2012 15:02
    Moderator
  • Hallo Denniver,

     

    danke Du hast mir hier sehr geholfen.

    Grüße Heinz

    Dienstag, 10. Januar 2012 16:47