fizzo361
Goto Top

Problem bei Shellcode: Programm rechnet mit Datum falsch

Hallo Liebe IT-Gemeinde,
ich habe bereits viele Infos aus dem Forum nutzen können ,aber nun bin ich soweit das ich mich bei euch melden muss.
Sind und zweck des ganzen:
User über Ihr Ablaufen des AD Passworts zu erinnern.
$warnung_tage = 6
$smtpserver = "blubb"  
$mailfrom = "blubb"  
$betreff = "Dein Passwort läuft in 7 Tagen ab!"  
$MailTo = "blubb"  
 
$mailbody = "<div>  
<p>Hallo,</p>
<p>Dein Kennwort wird in 7 Tagen ablaufen. Bitte melde Dich an der Domäne an und ändere dein Passwort</p>
<p>Vielen Dank und viele Grüße</p>
</div>"  
 
 # Benötigte Module einbinden
Import-Module ActiveDirectory
 
# Berechne das Datum + Anzahl der Tage zum späteren Vergleich
$warnung_datum = Get-Date -Format dd.MM.yyyy((Get-Date).adddays($warnung_tage)) 
 
# Filter alle AD User und die benötigten Attribute. Weiterhin wird das Ablaufdatum des
# Passwortes aus dem AD-Attribut msDS-UserPasswordExpiryTimeComputed umgerechnet und
# in umbenannt in PWAblaufdatum
 
$aduser=Get-ADUser -filter {(Enabled -eq $True) -and (PasswordNeverExpires -eq $False)} -Properties Mail, DisplayName, msDS-UserPasswordExpiryTimeComputed | Select Mail, DisplayName, @{Name="PWAblaufdatum";Expression={([datetime]::fromfiletime($_."msDS-UserPasswordExpiryTimeComputed")).DateTime}}  
 
# Schleife für jeden User aus $aduser
foreach ($i in $aduser)
{
     # Setze Variable für aktuellen User mit Passwortablaufdatum
     $PWAblaufdatum = Get-date($i.PWAblaufdatum) -Format dd.MM.yyyy 
     $ausgabe1 = $i.DisplayName
     $ausgabe2 = $i.Mail
     "Ausgabe: $PWAblaufdatum, $ausgabe1, $ausgabe2, $warnung_datum"  
     # Wenn die Werte gleich sind dann sende eine Mail
     if($PWAblaufdatum -le $warnung_datum)
     {
      "Treffer"   
      #"Ausgabe1: $ausgabe1"  
      #"Ausgabe2: $ausgabe2"  
          #Send-MailMessage -SmtpServer $smtpserver -From "<test@sbcbcprouu.de>" -To "<test@sbcbprouu.de>" -Subject $betreff -BodyAsHtml $mailbody  
     }
     else 
     {
     "Keine Treffer"  
     }
 }
Diesen Code habe ich im Netz gefunden.
Die Send-MailMessage funktioniert noch nicht aber dies ist nicht das eigentliche Problem
Ich habe Probleme bei den Treffern in der
if($PWAblaufdatum -le $warnung_datum)
Anweisung.

Hier sind meine Ergebnisse:
Ausgabe: 30.07.2019, Administrator, admin@stest.local, 30.05.2019
Keine Treffer
Ausgabe: 01.02.2018, Stepenishchenkooo, Yulias, , 30.05.2019
Treffer
Ausgabe: 20.08.2019, Schaendler, Maria, , 30.05.2019
Treffer
Ausgabe: 28.05.2019, Quruant, Roberth, , 30.05.2019
Treffer
Ausgabe: 28.07.2019, Muschkesky, Denyese, , 30.05.2019
Treffer
Administraot passt, Stepenishchenkooo passt auch, aber warum sind die weiteren Ergebnisse ebenfalls Treffer?

Ich hoffe Ihr k önnt mir helfen.
Vielen Dank
Fizzo361

Content-ID: 455442

Url: https://administrator.de/contentid/455442

Ausgedruckt am: 22.11.2024 um 06:11 Uhr

Kraemer
Kraemer 24.05.2019 um 09:50:07 Uhr
Goto Top
Zitat von @Fizzo361:
Administraot passt, Stepenishchenkooo passt auch, aber warum sind die weiteren Ergebnisse ebenfalls Treffer?
weil du zwei Strings miteinander vergleichst. Wozu soll das -Format dd.MM.yyyy gut sein?
Fizzo361
Fizzo361 24.05.2019 um 09:56:57 Uhr
Goto Top
Hallo Kraemer,

Wenn ich String miteinader vergleiche dann müsste es doch dennoch passen
20.08.2019 ist doch größer als 30.05.2019, daher dürfte es kein Treffer sein oder verstehe ich das falsch,
ich hätte auch kein Problem wenn man die Datumswerte miteinander vergleicht, aber wie stelle ich das an?

Ich bin nicht so stark mit der Shell Programmierung vertraut.

Vielen Dank.
Fizzo361
erikro
erikro 24.05.2019 um 10:05:30 Uhr
Goto Top
Moin,

Zitat von @Fizzo361:
20.08.2019 ist doch größer als 30.05.2019, daher dürfte es kein Treffer sein oder verstehe ich das falsch,

Nö. 2 !> 3 Das alte Problem mit dem numerischen, dem alphanumerischen und dem Datumsvergleich. Schreibst Du das Datum in einen String, dann wird das ein alphanumerischer Vergleich. Und da gilt 2<3 und nicht 3<2.

PS C:\> $str_datum = get-date -format dd.MM.yyyy((Get-Date).adddays(20))
PS C:\> $str_datum.gettype()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     String                                   System.Object

Deklariere die Variablen als Datum und dann sollte das auch mit dem Datumsvergleich klappen.

hth

Erik
Kraemer
Kraemer 24.05.2019 aktualisiert um 10:10:31 Uhr
Goto Top
Zitat von @Fizzo361:
ich hätte auch kein Problem wenn man die Datumswerte miteinander vergleicht, aber wie stelle ich das an?
lass die Formatierung weg

PS C:\>$str_datum = get-date (Get-Date).adddays(20)
PS C:\> $str_datum.gettype()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     DateTime                                 System.ValueType
MrT0astbr0t
MrT0astbr0t 24.05.2019 um 10:13:59 Uhr
Goto Top
Das wirds denke ich auch sein.
erikro
Lösung erikro 24.05.2019 aktualisiert um 10:18:14 Uhr
Goto Top
Moin,

Zitat von @Kraemer:
lass die Formatierung weg

So ist es, denn:

PS C:\> $(get-date -date $(get-date).adddays(6)).gettype()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     DateTime                                 System.ValueType


PS C:\> $(get-date -date $(get-date).adddays(6) -format "yyMMdd").gettype()  

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     String                                   System.Object

Liebe Grüße

Erik
erikro
erikro 24.05.2019 um 10:26:53 Uhr
Goto Top
Noch'n Tipp:

PS C:\> $date = get-date
PS C:\> $date

Freitag, 24. Mai 2019 10:25:29


PS C:\> $date.ToShortDateString()
24.05.2019
PS C:\ldap>

So steht in $date ein Datum und mit den Methoden kannst Du das dann formatiert ausgeben lassen.
Fizzo361
Fizzo361 24.05.2019 um 13:30:04 Uhr
Goto Top
Super, ich habe die Formatierung weggelassen und erhalte nun die richtigen Werte,
werde mich jetzt an ied E-Mail geschichte weiterhängen.

Vielen Dank an Alle, super arbeit Jungs

Gruß
Fizzo361
Thema erledigt!
Fizzo361
Fizzo361 04.06.2019 um 08:24:10 Uhr
Goto Top
Hallo community,

ich muss euch leider zu dem oben gezeigtem Script nochmal was fragen,
ich habe die E-Mail versende Routine erfolgreich abgeschlossen... nun hätte ich habe aber gerne
noch eine Zählvariabe, welche mir sagt " Ihr Kennwort läuft in X Tagen aus" damit ich nicht in jeder Mail den Text zustehen
habe ihr Kennwort läuft in den nächsten 7 Tagen aus, sondern explizt sagen kann ihr Passwort läuft in bsp. 2 Tagen aus.

könnt ihr mir nochmal behilflich sein?

Viele Grüß
Fizzo361
Kraemer
Lösung Kraemer 04.06.2019 um 08:27:29 Uhr
Goto Top
($PWAblaufdatum-(Get-Date)).days
Fizzo361
Fizzo361 05.06.2019 um 09:13:02 Uhr
Goto Top
Super vielen Dank,
damit hat es geklappt (Y).