Benutzer mit den meisten Antworten
Set-ADSUser: Daten in ein neues Attribut einfügen.

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 GierkeImport-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.SetADUserHat jemand von Euch dazu eine Idee, wie ich ein neues Attribut mit Set-ADUser ansprechen kann?
Danke schon im voraus.
Heinz
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".- Bearbeitet Denniver ReiningMVP, Moderator Dienstag, 10. Januar 2012 13:06
- Als Antwort markiert Denniver ReiningMVP, Moderator Dienstag, 10. Januar 2012 17:21
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".- Bearbeitet Denniver ReiningMVP, Moderator Dienstag, 10. Januar 2012 13:06
- Als Antwort markiert Denniver ReiningMVP, Moderator Dienstag, 10. Januar 2012 17:21
-
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 : InvokeMethodOnNullHast Du dafür eine Idee.
Grüße, Heinz
-
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".- Bearbeitet Denniver ReiningMVP, Moderator Dienstag, 10. Januar 2012 14:00
-
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
-
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".