none
Datum vergleichen RRS feed

  • Frage

  • Hallo zusammen,

    ich möchte alle User die heute das Passwort geändert haben. Leider werde ich mit den hunderten Anleitungen im Google auch nicht ganz schlau

    am liebsten wäre mir    where {$_.PasswordLastSet -eq "2016-11-10"} aber Datum kann man ja mit string nicht vergleichen.

    und mit den get-date Anleitung komm ich nicht zurecht.

    get-aduser -filter * -properties * | where {(get-date $_.PasswordLastSet).date -eq (get-date).Date} | ft DisplayName,SamAccountName,passwordlastSet -autosize

    kann mir jemand einen Tipp geben.


    Chris

    Donnerstag, 10. November 2016 10:25

Antworten

  • Hey,

    der Filter sitzt noch nicht richtig.... aber ungefähr dürfte es so aussehen.

    https://blogs.technet.microsoft.com/heyscriptingguy/2013/11/11/powertip-use-powershell-to-format-dates/

    $date = get-date -Format d #zeigt tag.monat.jahr an

    get-aduser -filter * -properties * | ? {$_.passwordlastSet -eq $date} | ft DisplayName,SamAccountName,passwordlastSet -autosize

    Gruß

    Carsten


    • Bearbeitet Carsten Heins Donnerstag, 10. November 2016 11:10
    • Als Antwort markiert -- Chris -- Freitag, 11. November 2016 10:13
    Donnerstag, 10. November 2016 11:02
  • Hi Carsten,

    das geht so nicht, weil das Attribut 'passwordlastset' auch noch die Uhrzeit (zu allem Überfluss auch noch die Sekunden) enthält. Mit "-Like" geht es aber dooferweise auch nicht (grad getestet).

    Auch auf die Gefahr hin, dass meine Lösung etwas "durch die Brust ins Knie ist":

    # Aktuelles Datum ohne Uhrzeit einlesen
    $ActualDate = Get-Date -Format d
    
    # Alle Benutzer in Variable einlesen
    $Users = Get-ADUser -Filter * -Properties * | Select SAMAccountName,PasswordLastSet
    
    # Für jeden Benutzer Prüfung durchführen
    ForEach ($User in $Users)
       {
       # Nur weitermachen, wenn das Feld 'passwordlastset' gefüllt ist, sonst hässliche Fehlermeldung
       if ($User.PasswordLastSet)
          {
          # Konvertierung des Attributs in 'Nur Datum'
          $PWDDate = $User.PasswordLastSet.ToShortDateString()
          $Username = $User.SAMAccountName
          
          # Wenn Datum mit aktuellem Datum übereinstimmt, Benutzernamen ausgeben
          if ($PWDDate -like $ActualDate)
             {
             Write-Output $Username
             }
          }
       }
    Du kannst die Benutzer noch eingrenzen, damit das Skript nicht die ganze Domäne abfragt (-Filter).


    Liebe Grüße

    Ben

    _____________________________________

    MCSA Office 365

    MCSA SQL Server 2014

    MCITP Windows 7

    MCSA Windows 8/10

    MCSE Cloud Platform and Infrastructure

    MCSE Messaging

    MCSE Productivity

    _____________________________________

    Wenn Dir meine Antwort hilft, markiere sie bitte entsprechend als Antwort. Danke! :-).


    • Bearbeitet Ben-neB Donnerstag, 10. November 2016 11:14
    • Als Antwort markiert -- Chris -- Freitag, 11. November 2016 10:10
    Donnerstag, 10. November 2016 11:14
  • Und wie wäre es ganz einfach mit:
    where {$_.PasswordLastSet.ToString("yyyy-MM-dd") -eq "2016-11-10"

    • Als Antwort vorgeschlagen Carsten Heins Freitag, 11. November 2016 08:24
    • Als Antwort markiert -- Chris -- Freitag, 11. November 2016 10:10
    Freitag, 11. November 2016 07:03

Alle Antworten

  • Hey,

    der Filter sitzt noch nicht richtig.... aber ungefähr dürfte es so aussehen.

    https://blogs.technet.microsoft.com/heyscriptingguy/2013/11/11/powertip-use-powershell-to-format-dates/

    $date = get-date -Format d #zeigt tag.monat.jahr an

    get-aduser -filter * -properties * | ? {$_.passwordlastSet -eq $date} | ft DisplayName,SamAccountName,passwordlastSet -autosize

    Gruß

    Carsten


    • Bearbeitet Carsten Heins Donnerstag, 10. November 2016 11:10
    • Als Antwort markiert -- Chris -- Freitag, 11. November 2016 10:13
    Donnerstag, 10. November 2016 11:02
  • > $date = get-date -Format d #zeigt tag.monat.jahr an
     
    Das setzt allerdings hh/mm/ss auf 00:00:00, und wenn das Kennwort nie
    geändert wurd, ist pwdlastset nicht gesetzt, deshalb...
     
    > get-aduser -filter * -properties * | ? {$_.passwordlastSet -eq $date} |
    > ft DisplayName,SamAccountName,passwordlastSet -autosize
     
    $date = ( get-date -Format d ).ToShortDateString()
     
    get-aduser -filter * -properties * | ? { $_.passwordlastset -and (
    $_.passwordlastSet.ToShortDateString() -eq $date ) } | ft
    DisplayName,SamAccountName,passwordlastSet -autosize
     
    :-)
     
    Gruß, Martin
     
    • Als Antwort vorgeschlagen Carsten Heins Donnerstag, 10. November 2016 11:24
    Donnerstag, 10. November 2016 11:14
  • Hi Carsten,

    das geht so nicht, weil das Attribut 'passwordlastset' auch noch die Uhrzeit (zu allem Überfluss auch noch die Sekunden) enthält. Mit "-Like" geht es aber dooferweise auch nicht (grad getestet).

    Auch auf die Gefahr hin, dass meine Lösung etwas "durch die Brust ins Knie ist":

    # Aktuelles Datum ohne Uhrzeit einlesen
    $ActualDate = Get-Date -Format d
    
    # Alle Benutzer in Variable einlesen
    $Users = Get-ADUser -Filter * -Properties * | Select SAMAccountName,PasswordLastSet
    
    # Für jeden Benutzer Prüfung durchführen
    ForEach ($User in $Users)
       {
       # Nur weitermachen, wenn das Feld 'passwordlastset' gefüllt ist, sonst hässliche Fehlermeldung
       if ($User.PasswordLastSet)
          {
          # Konvertierung des Attributs in 'Nur Datum'
          $PWDDate = $User.PasswordLastSet.ToShortDateString()
          $Username = $User.SAMAccountName
          
          # Wenn Datum mit aktuellem Datum übereinstimmt, Benutzernamen ausgeben
          if ($PWDDate -like $ActualDate)
             {
             Write-Output $Username
             }
          }
       }
    Du kannst die Benutzer noch eingrenzen, damit das Skript nicht die ganze Domäne abfragt (-Filter).


    Liebe Grüße

    Ben

    _____________________________________

    MCSA Office 365

    MCSA SQL Server 2014

    MCITP Windows 7

    MCSA Windows 8/10

    MCSE Cloud Platform and Infrastructure

    MCSE Messaging

    MCSE Productivity

    _____________________________________

    Wenn Dir meine Antwort hilft, markiere sie bitte entsprechend als Antwort. Danke! :-).


    • Bearbeitet Ben-neB Donnerstag, 10. November 2016 11:14
    • Als Antwort markiert -- Chris -- Freitag, 11. November 2016 10:10
    Donnerstag, 10. November 2016 11:14
  • >       $PWDDate = $User.PasswordLastSet.ToShortDateString()
     
    Exakt zeitgleich :))
     
    Donnerstag, 10. November 2016 16:16
  • Und wie wäre es ganz einfach mit:
    where {$_.PasswordLastSet.ToString("yyyy-MM-dd") -eq "2016-11-10"

    • Als Antwort vorgeschlagen Carsten Heins Freitag, 11. November 2016 08:24
    • Als Antwort markiert -- Chris -- Freitag, 11. November 2016 10:10
    Freitag, 11. November 2016 07:03
  • so gings dann auch ...

    $PwdDays = (get-date).AddDays(-1).date
    get-aduser -filter {(passwordlastset -ge $PwdDays.date)} -properties * | ft DisplayName,SamAccountName,passwordlastSet -autosize

    DANKE für eure Tipps


    Chris

    Freitag, 11. November 2016 10:12
  • sorry wenn ich hier im falschen Forum frage, aber vielleicht hatte das schon einmal jemand.

    ich bekomme seit einiger Zeit keine Antwortmails mehr? Kennt das jemand?


    Chris

    Freitag, 11. November 2016 10:39