none
AccountExpires in AD mit einem Skript setzen RRS feed

  • Frage

  • Hallo zusammen,

    ich habe eine CSV-Datei (Adressenstamm aus eine NDS) aus welchem ich u.a. ein Ablaufdatum der User übernehmen will.

    Die Definition ist u.a. folgende:


    Import-CSV "C:\Users\hgierke\Documents\Meine Skripts\Adressbuch.csv" |  % {
     $User = $_.uid
        $EMail = $_.mail
        $DisplayName = $_.cn
        $Status = $_.title
        $Abteilung = $_.department
        $Gebaeude = $_.location
        $Telefon = $_.telephonenumber
        $Fax = $_.facsimiletelephonenumber
        $Handy = $_.mobile
        $Ort = $_.l
        $CC = $_.companyname
        $UNID = $_.level2
        $Firma = $_.level2_1
        $Buero = $_.physicaldeliveryofficename
        $Land = $_.c
        $Plz = $_.postalcode
        $Strasse = $_.officestreetaddress
        $Benutzerkuerzel = $_.altfullnamesort
        $PersNr = $_.employeeid
        $Funktion = $_.level4_3
        $Position = $_.level6
        $Ablaufdatum = $_.level0_1

    Mein (Teil)skript sieht so aus:
                 
                 if ($Ablaufdatum -ne "")
                    {$userobj.accountExpires=$Ablaufdatum
                     write-host $userobj.accountExpires
                     $userobj.commitchanges()}

    Bei dieser Anweisung erhalte ich, nach mehreren Test, immer folgenden Fehler obwohl in dem entsprechenden Feld
    ein Ablaufdatum ( 26.03.2012 ) enthalten ist.           

    Fehlermeldung: 26.03.2012
    Exception calling "CommitChanges" with "0" argument(s): "The attribute syntax specified to the directory
     service is invalid.
    "
    At C:\Users\hgierke\Documents\Meine Skripts\UpdUserDaten_Neu_2.ps1:156 char:40
    +                  $userobj.commitchanges <<<< ()}
        + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
        + FullyQualifiedErrorId : DotNetMethodException

    Kann mir hierzu jemand eine Lösung anbieten, mit welcher ich das Datum entsprechend setzen kann?

    Alle anderen Attribute werden fehlerfrei übernommen.

    Danke schon mal im voraus.

    Daddy48

    Dienstag, 13. März 2012 13:11

Antworten

  • Account-Expires ist ein 64Bit Integer! Der als Filetime abgespeichert wird !
    Siehe hier:
    http://msdn.microsoft.com/en-us/library/windows/desktop/ms675098%28v=vs.85%29.aspx

    Folgendes sollt immer zu einem Korrekten Account-Expires führen:

    $Ablaufdatum = ([DateTime]$_.level0_1).ToFileTime()


    Please click “Mark as Answer” if my post answers your question and click Vote as Help if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als Hilfreich und Beiträge die deine Frage ganz oder teilweise beantwortet haben als Antwort.
    My PowerShell Blog http://www.admin-source.info
    [string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '

    • Als Antwort markiert Daddy48 Mittwoch, 14. März 2012 06:50
    Mittwoch, 14. März 2012 06:40

Alle Antworten

  • suchmaschinen sind dein freund!

    PowerShell accountExpires
    =
    http://www.powershell.nu/2010/08/19/setting-accountexpires-using-powershell/


    Please click “Mark as Answer” if my post answers your question and click Vote as Help if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als Hilfreich und Beiträge die deine Frage ganz oder teilweise beantwortet haben als Antwort.
    My PowerShell Blog http://www.admin-source.info
    [string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '


    Dienstag, 13. März 2012 15:30
  • Hallo,

    Du musst das in eine Struktur "DateTime" konvertieren.

       $Position = $_.level6 
        $Ablaufdatum = [DateTime]$($_.level0_1)
    
     

    Du musst natürlich sicherstellen, das in $_.level0_1 ein korrektes Datum in der Form "MM.DD.YYYY" enthalten ist.

    Viele Grüße

    Frank


    -- Frank Röder http://blog.iteach-online.de --

    Dienstag, 13. März 2012 19:03
  • Account-Expires ist ein 64Bit Integer! Der als Filetime abgespeichert wird !
    Siehe hier:
    http://msdn.microsoft.com/en-us/library/windows/desktop/ms675098%28v=vs.85%29.aspx

    Folgendes sollt immer zu einem Korrekten Account-Expires führen:

    $Ablaufdatum = ([DateTime]$_.level0_1).ToFileTime()


    Please click “Mark as Answer” if my post answers your question and click Vote as Help if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als Hilfreich und Beiträge die deine Frage ganz oder teilweise beantwortet haben als Antwort.
    My PowerShell Blog http://www.admin-source.info
    [string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '

    • Als Antwort markiert Daddy48 Mittwoch, 14. März 2012 06:50
    Mittwoch, 14. März 2012 06:40
  • Hallo Peter,

    da hast Du recht. Ich war allerdings auf das cmdlet "new-aduser" aus. Da kannst Du nämlich auf ein normales Datum übergeben.

    z.B.

    set-aduser testuser -accountexpirationdate $([DateTime]"01.20.2012")

    Ich hatte übersehen, das er über die DirectoryEntry Klasse geht.

    Viele Grüße

    Frank


    -- Frank Röder http://blog.iteach-online.de --

    Mittwoch, 14. März 2012 07:32