itallrounder
Goto Top

PS Hinweis Kennwortablauf per E-Mail

Guten Morgen zusammen,

ich habe vor langer Zeit mal ein kleines PS Skript gebastelt, was automatisiert eine E-Mail an unsere Mitarbeiter versendet, wenn Ihr Kennwort abläuft.
Das Skript läuft lokal auf einem DC per Aufgabenplanung und wird jeden Freitag um 07:00 ausgeführt.


Nun habe ich das Skript etwas überarbeitet und Hilfeartikel zur Kennwortänderung mit eingebaut.
Dann habe ich das Skript Testweise ausgeführt und siehe da, es wirft Fehler.


Fehlermeldung im Skript Ablauf:

MethodException: C:\Git\skript-galerie\Powershell\AD-Password-Expire-Mail-2021.ps1:16:1
Line |
  16 |  $daysleft=$ExpiryDate-$today
     |  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     | Cannot convert argument "1", with value: "21.09.2021 10:21:59", for "op_Subtraction" to type "System.TimeSpan": "Cannot convert value "21.09.2021 10:21:59" to type "System.TimeSpan". Error: "Invalid cast from 'System.DateTime' to  
     | 'System.TimeSpan'.""  


Könnte mir jemand verraten wie ich diese Fehlermeldung weg bekomme?
Meine Powershell "Skills" haben gerade mal so für das u.g Skript gereicht.


Wenn ich das hier eh schon poste:
- Kann ich den Mailbody auch als HTML formatieren, sodass z.B "Ihr Kennwort läuft in X Tagen ab" rot markieren kann?
- Wenn bei Mitarbeiter Max Müller das Kennwort am Samstag den 02.10.2021 abläuft, bekommt er nach meinem Verständnis keine Mail mit:
Ihr Kennwort läuft in 8 Tagen ab, wenn der Durchlauf am Freitag den 24.09.2021 statt findet. Somit bekommt der die Mail einen Tag vor Ablauf...etwas unglücklich.
Die Tage mag ich aber nicht auf 20+ setzten, da die Mitarbeiter sonst wohl 2-3 Mails erhalten, dass Ihr Kennwort bald abläuft, was wieder für Unmut bei dem ein oder anderen führt.


Mein Skript:

$Credential = Get-Credential
Enter-PSSession -ComputerName <DomainController> –credential $Credential

Import-Module ActiveDirectory

Get-ADUser -filter * -properties PasswordLastSet,EmailAddress,GivenName,Surname -SearchBase "DC=<CompanyName>,DC=local" -SearchScope Subtree |foreach {  

$PasswordSetDate=$_.PasswordLastSet
$maxPasswordAgeTimeSpan = $null
$maxPasswordAgeTimeSpan = (Get-ADDefaultDomainPasswordPolicy).MaxPasswordAge

$today=get-date
$ExpiryDate=$passwordSetDate + $maxPasswordAgeTimeSpan

$daysleft=$ExpiryDate-$today

$display=$daysleft.days
$Vorname=$_.GivenName
$Nachname=$_.Surname

if ($display -lt 10 -and $display -gt 0)
{
$MyVariable = @"  

Sehr geehrte/r $Vorname $Nachname,

ihr Kennwort wird in $display Tagen ablaufen.

Bitte aktualisieren Sie Ihr Kennwort rechtzeitig, da nach Ablauf des Kennwortes kein Zugriff mehr auf IT Systeme möglich ist.

Eine Anleitung zur Kennwortänderung finden Sie unter folgendem Artikel:
<Hilfe Artikel Intranet>

Beachten Sie dabei bitte auch die aktuell gültige Passwortrichtlinie, zu finden in folgendem Artikel:
<URL zur Kennwortrichtlinie>

Sollten Sie Probleme bei der Kennwortänderung haben, wenden Sie sich an das IT-Helpdesk.
helpdesk@company.de


Mit freundlichen Grüßen,

IT Abteilung


*** Diese Nachricht wurde automatisch generiert - bitte antworten Sie nicht darauf! ***

"@  
#send-mailmessage -to $_.EmailAddress -from no-reply@company.de -Subject "Information: Ihr Kennwort wird in $display Tagen ablaufen" -body $MyVariable  -smtpserver smtp-out.company.local -encoding ([System.Text.Encoding]::UTF8) 
send-mailmessage -to personal@company.de -from no-reply@company.de -Subject "Information: Ihr Kennwort wird in $display Tagen ablaufen" -body $MyVariable  -smtpserver smtp-out.company.local -encoding ([System.Text.Encoding]::UTF8)  
}



Ich bedanke mich bei euch schon einmal, für eure Tatkräftige Unterstützung.

Content-ID: 1287350724

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

Ausgedruckt am: 22.11.2024 um 03:11 Uhr

ukulele-7
ukulele-7 21.09.2021 um 10:39:59 Uhr
Goto Top
Ablaufende Kennwörter sind aber sowas von 2015, warum schaffst du das nicht ab?
ITAllrounder
ITAllrounder 21.09.2021 um 10:47:42 Uhr
Goto Top
Zitat von @ukulele-7:

Ablaufende Kennwörter sind aber sowas von 2015, warum schaffst du das nicht ab?

Moin,

da wir diverse Dienste nach extern veröffentlichen (auch wenn es mit 2FA geschützt ist, bevorzugen wir einen Kennwortwechsel aller AD Accounts. Der Kennwortwechsel beschränkt sich auf 180 Tage Gültigkeit.
Auch unser externer Datenschützer hält an dieser Lösung fest.

Man siehe nur die Thematik mit Hafnium....auch wenn wir von dem Ding verschont wurden, haben wir per Shell alle Kennwörter ablaufen lassen und die Benutzer " gezwungen" ein neues Kennwort zu wählen.

Auch bei diversen ServiceAccounts ändern wir die Kennwörter regelmäßig.

Für den einen mag es "altmodisch" sein für uns ist das hier aber noch gängige Praxis.
149569
149569 21.09.2021 aktualisiert um 12:19:44 Uhr
Goto Top
$_.PasswordLastSet
Du prüfst nicht ob PasswordLastSet $null ist, bei neuen Usern bei denen das Datum dort noch nicht gesetzt ist macht es dann peng bei der Berechnung.
Außerdem berücksichtigst du keine PSOs (PasswordSettingObjects) in deinem Code, welche bei Usern zu anderen Ablaufdaten führen kann.
Kann ich den Mailbody auch als HTML formatieren, sodass z.B "Ihr Kennwort läuft in X Tagen ab" rot markieren kann?
Ja, bei Send-Mailmessage den Parameter -BodyAsHtml setzen und dann den Body als HTML formatieren und via CSS den Text formatieren.
wecanIT
wecanIT 22.09.2021 aktualisiert um 10:19:56 Uhr
Goto Top
Hallo,

das Skript würde ich auch gerne probieren. Finde ich eine tolle Sache.

Grüße

Ralf