diff --git a/files/Aufgabe.txt b/files/Aufgabe.txt new file mode 100644 index 0000000..e28cd3d --- /dev/null +++ b/files/Aufgabe.txt @@ -0,0 +1,3 @@ +C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe + +- command "C:\scripts\password-reminder.v1.ps1 \ No newline at end of file diff --git a/files/CPR - Kennwortablaufbenachrichtigung-für-alle.xml b/files/CPR - Kennwortablaufbenachrichtigung-für-alle.xml new file mode 100644 index 0000000..e060129 Binary files /dev/null and b/files/CPR - Kennwortablaufbenachrichtigung-für-alle.xml differ diff --git a/password-reminder.v1-functional.ps1 b/password-reminder.v1-functional.ps1 new file mode 100644 index 0000000..9a9a674 --- /dev/null +++ b/password-reminder.v1-functional.ps1 @@ -0,0 +1,80 @@ +# Active Directory Passwort Policy: +$MaxPasswordAge = 365 # Max Password age in days +$WarningLevel = 364 # Warn Users XX Days before Password expires + +# Mail Settings: +$SMTPServer = "smtp.media-techport.int" +$FromName = "Media-Techport.DE | Passwort Erinnerung" +$FromEmail = "noreply@media-techport.de" +$Subject = "Dein Passwort muss geändert werden!" + +# Funktion zur expliziten Zeichencodierung +function Encode-StringToUTF8 ($inputString) { + $utf8Bytes = [System.Text.Encoding]::UTF8.GetBytes($inputString) + return [System.Text.Encoding]::UTF8.GetString($utf8Bytes) +} + +# Message Template (Mailbody) +function New-MailBody ($GivenName, $Surname, $DaysBeforePasswordchange, $PasswordExpireDate) { + $Mailbody = @" + + + + + Hallo $($GivenName) $($Surname), +
+ Du erhälst diese E-Mail, da du ein Benutzerkonto auf Media-Techport.DE hast. +
+ Dein Passwort bei media-techport.de endet am $($PasswordExpireDate). +
+ Du hast $($DaysBeforePasswordchange) Tage Zeit dein Kennwort zu ändern. +
+ Wenn du der Passwortänderung nicht nachkommst, wirst du dich bei deinem Administrator melden müssen, damit das Kennwort gesetzt werden kann. +
+
+ Freundliche Grüße +
+ Media-Techport.DE + +"@ + return Encode-StringToUTF8 $Mailbody +} + +# Import all active AD-Users +$AllADUsers = Get-ADUser -Filter {Enabled -eq $True -and PasswordNeverExpires -eq $False} -Properties PasswordLastSet, mail + +# Calculate expiring passwords and store them in an object +$today = Get-Date +$ExpirePasswordList = @() +foreach ($ADUser in $AllADUsers) { + $GivenName = $ADUser.GivenName + $Surname = $ADUser.Surname + $MailAddress = $ADUser.mail + + $PasswordLastSet = $ADUser.PasswordLastSet + $PasswordExpireDate = $PasswordLastSet.AddDays(+$MaxPasswordAge) + + $DaysBeforePasswordchange = ($PasswordExpireDate - $today).Days + if ($DaysBeforePasswordchange -le $WarningLevel) { + $ExpirePasswordList += New-Object PSObject -property @{Givenname=$Givenname;Surname=$Surname;MailAddress=$MailAddress;DaysBeforePasswordchange=$DaysBeforePasswordchange;PasswordExpireDate=$PasswordExpireDate} + } +} + +# Filter Users with Mailaddresses +$ExpirePasswordList = $ExpirePasswordList | Where-Object {$_.mailaddress} + +# Send mail to every user with expired password +foreach ($ADUser in $ExpirePasswordList) { + $GivenName = $ADUser.GivenName + $Surname = $ADUser.Surname + $MailAddress = $ADUser.MailAddress + $DaysBeforePasswordchange = $ADUser.DaysBeforePasswordchange + $PasswordExpireDate = $ADUser.PasswordExpireDate + + $Body = New-MailBody $GivenName $Surname $DaysBeforePasswordchange $PasswordExpireDate + + # Erstelle den "From" Header mit Sendername und E-Mail-Adresse + $FromHeader = "{0} <{1}>" -f $FromName, $FromEmail + + Send-MailMessage -SmtpServer $SMTPServer -To $MailAddress -From $FromHeader -Body $Body -BodyAsHtml -Subject $Subject -Encoding ([System.Text.Encoding]::UTF8) +} \ No newline at end of file diff --git a/password-reminder.v1.ps1 b/password-reminder.v1.ps1 new file mode 100644 index 0000000..52590b0 --- /dev/null +++ b/password-reminder.v1.ps1 @@ -0,0 +1,91 @@ +# Script Name: password-reminder.v1.ps1 +# Beschreibung: Schickt dem Nutzer eine Kennwortablauferinnerung +# Aufruf: - +# Autor: Patrick Asmus +# Web: https://www.media-techport.de +# Git-Reposit.: https://git.media-techport.de/scriptos/private-script-collection.git +# Version: 2.1 +# Datum: 21.10.2023 +# Modifikation: logo verschoben +##################################################### + +# Active Directory Passwort Policy: +$MaxPasswordAge = 365 # Max Password age in days +$WarningLevel = 14 # Warn Users XX Days before Password expires + +# Mail Settings: +$SMTPServer = "smtp.media-techport.int" +$FromName = "Media-Techport.DE | Account Service" +$FromEmail = "noreply@media-techport.de" +$Subject = "Wichtige Mitteilung - Dein Kennwort läuft bald ab" + +# Funktion zur expliziten Zeichencodierung +function Encode-StringToUTF8 ($inputString) { + $utf8Bytes = [System.Text.Encoding]::UTF8.GetBytes($inputString) + return [System.Text.Encoding]::UTF8.GetString($utf8Bytes) +} + +# Funktion zum Erstellen des E-Mail-Texts (Mailbody) +function New-MailBody ($GivenName, $Surname, $DaysBeforePasswordchange, $PasswordExpireDate, $PasswordLastSet) { + $Mailbody = @" + +

Logo-Schwarz

+

Hallo $($GivenName),

+


Ich möchte dich darüber informieren, dass dein aktuelles Kennwort in Kürze abläuft.

Die Sicherheit deiner Daten ist mir ein wichtiges Anliegen und das regelmäßige Aktualisieren deines Kennworts ist ein wesentlicher Schutzmechanismus.


+

Dein Account ist mit folgenden Services verknüpft:

+

- Subsonic Media Streamer
- NextCloud
- Wing FTP-Server


+

Bitte beachte folgende Informationen zu deinem Account:

+

- Dein Kennwort läuft am $($PasswordExpireDate) ab.
- Gemäß meiner Sicherheitsrichtlinien müssen Kennwörter alle 365 Tage geändert werden.
- Dein Kennwort wurde zuletzt am $($PasswordLastSet) aktualisiert.
- Wenn du dein Kennwort nicht änderst, wird es in 14 Tagen ablaufen und dein Benutzer deaktiviert.
- Wenn dein Account einmal deaktiviert ist, kannst du diesen nur noch über mich wieder aktivieren.

+

Du kannst dein Kennwort hier ändern.


+

Bitte beachte meine Kennwortrichtlinien:

+

Das Kennwort darf nicht den Kontonamen des Benutzers oder mehr als zwei Zeichen enthalten, die nacheinander im vollständigen Namen des Benutzers vorkommen.
Das Kennwort muss mindestens acht Zeichen lang sein.
Das Kennwort muss Zeichen aus drei der folgenden Kategorien enthalten:
Großbuchstaben (A bis Z)
Kleinbuchstaben (a bis z)
Zahlen zur Basis 10 (0 bis 9)
Nicht alphabetische Zeichen (zum Beispiel !, $, #, %)
Die Komplexitätsvoraussetzungen werden erzwungen, wenn Kennwörter geändert oder erstellt werden.

+

Bitte antworte nicht auf diese E-Mail.
Wenn du Unterstützung benötigst oder Fragen hast, zögere nicht dich über mein Helpdesk oder per Mail an mich zu wenden.


+

Freundliche Grüße
Patrick Asmus
___________________________
www.media-techport.de 

+

Mobil: +49 (0) 1573 / 90 57 0353
E-Mail: support@media-techport.de

+ +"@ + + $MailbodyPath = "C:\temp\mailbody.html" + $Mailbody | Out-File -FilePath $MailbodyPath -Encoding UTF8 + return $MailbodyPath +} + +# Import all active AD-Users +$AllADUsers = Get-ADUser -Filter {Enabled -eq $True -and PasswordNeverExpires -eq $False} -Properties PasswordLastSet, mail + +# Calculate expiring passwords and store them in an object +$today = Get-Date +$ExpirePasswordList = @() +foreach ($ADUser in $AllADUsers) { + $GivenName = $ADUser.GivenName + $Surname = $ADUser.Surname + $MailAddress = $ADUser.mail + + $PasswordLastSet = $ADUser.PasswordLastSet + $PasswordExpireDate = $PasswordLastSet.AddDays(+$MaxPasswordAge) + + $DaysBeforePasswordchange = ($PasswordExpireDate - $today).Days + if ($DaysBeforePasswordchange -le $WarningLevel) { + $ExpirePasswordList += New-Object PSObject -property @{Givenname=$Givenname;Surname=$Surname;MailAddress=$MailAddress;DaysBeforePasswordchange=$DaysBeforePasswordchange;PasswordExpireDate=$PasswordExpireDate.ToString("dd.MM.yyyy");PasswordLastSet=$PasswordLastSet.ToString("dd.MM.yyyy")} + } +} + +# Filter Users with Mailaddresses +$ExpirePasswordList = $ExpirePasswordList | Where-Object {$_.mailaddress} + +# Send mail to every user with expired password +foreach ($ADUser in $ExpirePasswordList) { + $GivenName = $ADUser.GivenName + $Surname = $ADUser.Surname + $MailAddress = $ADUser.MailAddress + $DaysBeforePasswordchange = $ADUser.DaysBeforePasswordchange + $PasswordExpireDate = $ADUser.PasswordExpireDate + $PasswordLastSet = $ADUser.PasswordLastSet + + $BodyPath = New-MailBody $GivenName $Surname $DaysBeforePasswordchange $PasswordExpireDate $PasswordLastSet + + # Erstelle den "From" Header mit Sendername und E-Mail-Adresse + $FromHeader = "{0} <{1}>" -f $FromName, $FromEmail + + Send-MailMessage -SmtpServer $SMTPServer -To $MailAddress -From $FromHeader -Body (Get-Content $BodyPath | Out-String) -BodyAsHtml -Subject $Subject -Encoding ([System.Text.Encoding]::UTF8) -Priority High +} \ No newline at end of file diff --git a/screenshots/2023-10-21 21_39_56-Window.png b/screenshots/2023-10-21 21_39_56-Window.png new file mode 100644 index 0000000..92310fe Binary files /dev/null and b/screenshots/2023-10-21 21_39_56-Window.png differ diff --git a/screenshots/2023-10-21 21_40_14-Window.png b/screenshots/2023-10-21 21_40_14-Window.png new file mode 100644 index 0000000..cc6380a Binary files /dev/null and b/screenshots/2023-10-21 21_40_14-Window.png differ diff --git a/screenshots/2023-10-21 21_40_31-Window.png b/screenshots/2023-10-21 21_40_31-Window.png new file mode 100644 index 0000000..14d5a5b Binary files /dev/null and b/screenshots/2023-10-21 21_40_31-Window.png differ diff --git a/screenshots/2023-10-21 21_40_44-Window.png b/screenshots/2023-10-21 21_40_44-Window.png new file mode 100644 index 0000000..dab1e6b Binary files /dev/null and b/screenshots/2023-10-21 21_40_44-Window.png differ diff --git a/screenshots/2023-10-21 21_40_50-Window.png b/screenshots/2023-10-21 21_40_50-Window.png new file mode 100644 index 0000000..e816923 Binary files /dev/null and b/screenshots/2023-10-21 21_40_50-Window.png differ