Jump to content

"accountexpires"-wert eines AD-Users ändern


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

Empfohlene Beiträge

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

Link zu diesem Kommentar

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

Link zu diesem Kommentar

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 von B_inside
Link zu diesem Kommentar

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

Link zu diesem Kommentar

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

Link zu diesem Kommentar

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

Link zu diesem Kommentar

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.

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