B_inside 10 Geschrieben 13. August 2010 Melden Teilen Geschrieben 13. August 2010 Hallo, ich erstelle ein Script, dass die Erstellung eines Users für AD + Exchange weitestgehend automatisiert. Zu den Features soll unter anderem gehören, dass man das Auslaufen eines Accounts bestimmen können soll. Dazu habe ich bisher folgendes gefertigt: $Datum = read-host 'Wann soll der Account auslaufen? (Format: DD.MM.YYYY)' $AETag = $Datum.split(".")[0] $AEMonat = $Datum.split(".")[1] $AEJahr = $Datum.split(".")[2] $AEDatum = get-date -year $AEJahr -month $AEMonat -day $AETag -hour 0 -minute 0 -second 0 $User = [ADSI]"LDAP://CN=$Name,OU=$Ort,DC=domain,DC=de" $ds = New-Object directoryservices.directorysearcher($User) $ds.InvokeSet("AccountExpirationDate",$AEDatum) Leider gibt er für die letzte Zeile den Fehler Method invocation failed because [system.DirectoryServices.DirectorySearcher] doesn't contain a method named 'InvokeSet'. Die letzten beiden Zeilen sind nicht von mir, sondern aus einem Blog, bei dem das scheinbar ganz gut geklappt hat. Kann mir jemand sagen, wo mein Denkfehler ist? MfG /B_out Zitieren Link zu diesem Kommentar
NilsK 2.921 Geschrieben 13. August 2010 Melden Teilen Geschrieben 13. August 2010 Moin, jetzt gibst du uns bestimmt noch den Link zu dem Blog, damit wir mal schauen können, ob wir den Unterschied sehen, gelle? Gruß, Nils Zitieren Link zu diesem Kommentar
B_inside 10 Geschrieben 13. August 2010 Autor Melden Teilen Geschrieben 13. August 2010 Wenn das gewünscht ist gerne. Soll ja Foren geben, in denen externe Links nicht gern gesehen sind. PowershellEveryDay Dort der 2. Kasten. Das einzige, was ich meiner Meinung nach anders mache, ist das erhalten des Datums, aber wenn dort der Fehler läge, würde ich eine andere Fehlermeldung erhalten oder? MfG /B_out Zitieren Link zu diesem Kommentar
NilsK 2.921 Geschrieben 13. August 2010 Melden Teilen Geschrieben 13. August 2010 Moin, wenn ich es spontan richtig sehe, solltest du InvokeSet auf dem Objekt $User aufrufen, nicht auf $ds, oder? Gruß, Nils Zitieren Link zu diesem Kommentar
B_inside 10 Geschrieben 13. August 2010 Autor Melden Teilen Geschrieben 13. August 2010 Hallo Nils, danke für deine Antworten. Ich habs gerade mal geändert und bekomme nun die Fehlermeldung New-Object : Exception calling ".ctor" with "1" argument(s): "The value provided für adsObject does not implement IADs." + $ds = New-Object <<<< directoryservices.directoryentry ($User)[/Code] Den Teil habe ich gelöst bekommen in dem ich die vorletzte Zeile einfach gelöscht habe. [Code]Exception calling "InvokeSet" with "2" argument(s): "Unknown name. (Exception from HRESULT: 0x80020006 (DISP_E_UNKNOWNNAME))" + $User.InvokeSet( <<<< "AccountExpirationDate",$AEDatum) Die Exception scheint einfach mit InvokeSet nichts anfangen zu können, seh ich das richtig? MfG /B_out Zitieren Link zu diesem Kommentar
NilsK 2.921 Geschrieben 13. August 2010 Melden Teilen Geschrieben 13. August 2010 Moin, nein, das siehst du nicht richtig. InvokeSet gibt ja jetzt selbst einen Fehler zurück. Vermutlich kann es mit dem Datumsobjekt nichts anfangen. Gruß, Nils Zitieren Link zu diesem Kommentar
B_inside 10 Geschrieben 13. August 2010 Autor Melden Teilen Geschrieben 13. August 2010 (bearbeitet) Das hieße dann, dass invokeset funktioniert und er nur ein problem mit dem datum hat? das datumsformat von accountexpires ist largeinteger, das von $AEDatum ist ja eher n selbst erstelltes. d.h. ich muss dann mein eigenes format in largeinteger umwandeln. das war schon mal sehr hilfreich =) EDIT: ich habe unter PowerShellCommunity.org einen Dreizeiler gefunden, der mir das Format konvertiert. $DateIn = "2010/04/17" $ExpireDate = [datetime]::Parse($DateIn,[system.Globalization.CultureInfo]::InvariantCulture) $ExpireDate = $ExpireDate.ToFileTime()[/Code] mit $ExpireDate bekommt man dann den LargeInteger-Wert vom 17.04.2010: "129159288000000000" wenn ich diesen dann an $User.InvokeSet("AccountExpirationDate",$ExpireDate) weitergebe bekomme ich trotzdem die Exception. Scheint also doch nicht (nur) am Format zu liegen. =( EDIT2: Ich hab den dreizeiler jetz noch mal auf nem Windows Server 2008 R2 mit Active Directory Module probiert. Er kennt InvokeSet nicht. There is no such object on the server. Ich weiß nicht, was ich falsch gemacht habe, aber InvokeSet scheint ihm hier zu missfallen. bearbeitet 13. August 2010 von B_inside Zitieren Link zu diesem Kommentar
blub 115 Geschrieben 15. August 2010 Melden Teilen Geschrieben 15. August 2010 Hallo B_inside Die AD-Eigenschaft heisst nicht "AccountExpirationDate" , sondern "AccountExpires", dann klappts auch mit Invokeset $user.invokeset("accountexpires","129159288000000000") $user.setinfo() #nicht vergessen! cu blub Zitieren Link zu diesem Kommentar
B_inside 10 Geschrieben 17. August 2010 Autor Melden Teilen Geschrieben 17. August 2010 Hallo blub, ich habe deine Lösung ausprobiert und komme leider zu dem selben unzureichenden Ergebnis. Immernoch die Exception calling "InvokeSet" with "2" arguments. Ich verstehe nicht, warum das nicht geht. Und noch was: Wenn ich das Script ausführe und dann die Fehlermeldung bekomme, sollten ja die Variablen, die ich unterwegs genutzt habe noch gefüllt sein, oder? Sie geben mir aber allesamt nichts zurück. Auch das kann ich mir nicht erklären. Kann das miteinander im Zusammenhang stehen? Vielen Dank, dass ihr versucht, mir zu helfen. =) MfG /B_out Zitieren Link zu diesem Kommentar
blub 115 Geschrieben 17. August 2010 Melden Teilen Geschrieben 17. August 2010 Gib doch mal das ganze Skript Zitieren Link zu diesem Kommentar
B_inside 10 Geschrieben 17. August 2010 Autor Melden Teilen Geschrieben 17. August 2010 Habs angehängt. Leider hatte die Datei 400 Zeichen zuviel um sie einfach hier zu posten.^^ ADExchangeUserScriptpublic.txt Zitieren Link zu diesem Kommentar
blub 115 Geschrieben 17. August 2010 Melden Teilen Geschrieben 17. August 2010 Du verwendest Strichpunkte und Kommas im DN. Nur Kommas sind erlaubt $User = [ADSI]"LDAP://CN=$Name[color="Red"];[/color]OU=$DNAbt[color="Red"];[/color]OU=$DNOrt,DC=hen,DC=bspdomain,DC=de" $User.InvokeSet("accountexpires","$AEDatumLI") $User.SetInfo() ansonsten setze mal $name,$dnabt,$dn$AEDatumLI,$dnort fest ein, kopiers in ein extra Skript und probier dort den accountexpires zu setzen. cu blub Zitieren Link zu diesem Kommentar
B_inside 10 Geschrieben 17. August 2010 Autor Melden Teilen Geschrieben 17. August 2010 Hallo blub, vielen Dank für deine Hilfe, der Distinguished Name hat vorher scheinbar auch schon funktioniert. Also auch mit Semikola. Ich habe aber inzwischen herausgefunden, dass derjenige, der den Server aufgesetzt hat, leider nur Powershell 1.0 aufgespielt hat. Da wir hier sogar auf allen XP-Rechnern 2.0 haben, bin ich davon ausgegangen, dass auch hier 2.0 liegt. Mit Update auf 2.0 funktioniert das ganze auch. Trotzdem vielen Dank für euren Einsatz. Ich habe inzwischen auch deine Website angesehen und bin sehr beeindruckt, blub. Bleibt mir noch viel zu lernen. Ich hoffe ich darf euch noch mehr Fragen stellen, wenn sich mir welche ergeben. MfG /B_out Zitieren Link zu diesem Kommentar
blub 115 Geschrieben 17. August 2010 Melden Teilen Geschrieben 17. August 2010 ahso, danke fürs Feedback: für PS1 muss psbase vor das invokeset noch rein: $user.psbase.invokeset("... , für PS2 ist psbase optional ohne Wirkung cu blub Zitieren Link zu diesem Kommentar
B_inside 10 Geschrieben 18. August 2010 Autor Melden Teilen Geschrieben 18. August 2010 hmm ich hatte es auch mit psbase probiert^^ es hat nicht geklappt. ich weiß wirklich nicht, woran es lag. danke dir, dass du dir die zeit genommen hast. gibts eigentlich irgendwo ne referenz, was den unterschied zwischen 1.0 und 2.0 ausmacht? ich konnte sowas noch nicht wirklich finden und allgemein scheint powershell recht stiefmüttterlich dokumentiert zu sein. Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.