In Windows 7 werden Benutzer nach der Anmeldung nur noch durch eine Sprechblase der Taskleiste darüber informiert, dass deren Windows-Kennwort in naher Zukunft abläuft. Da diese Sprechblase gerne von Usern übersehen wird, kann zusätzlich mithilfe eine PowerShell-Skripts eine Emailbenachrichtigung eingerichtet werden.
Damit das Skript ausgeführt werden kann, muss es entweder auf einem Domain Controller (Win 2008 R2 aufwärts) oder einem Member-Server mit installierter „Active Directory-Domänendiensten“-Rolle aufgerufen werden. Außerdem muss ggf. noch PowerShell’s Execution Policy auf „RemoteSigned“ angepasst werden:
Set-ExecutionPolicy RemoteSigned
Hiermit kann geprüft werden wie die Execution Policy konfiguriert ist (Standardwert: Restricted):
Get-ExecutionPolicy
1.) PowerShell-Skript erstellen
Diesen Code in einen Texteditor kopieren, die hervorgehobenen Stellen anpassen und als PowerShell-Skript speichern (z.B. C:\Temp\password.ps1):
———————————————
Import-Module ActiveDirectory
$OUs = ‚OU=OU1,DC=domain,DC=de‘,’OU=OU2,DC=domain,DC=de‘
$OUs | Foreach {Get-ADUser -filter * -properties PasswordLastSet,EmailAddress,GivenName,Surname -SearchBase $_ -SearchScope Subtree} | foreach {
$PasswordSetDate=$_.PasswordLastSet
$maxPasswordAgeTimeSpan = $null
$maxPasswordAgeTimeSpan = (Get-ADDefaultDomainPasswordPolicy).MaxPasswordAge
$today=get-date
$ExpiryDate=$passwordSetDate + $maxPasswordAgeTimeSpan
$daysleft=$ExpiryDate-$today
$display=$daysleft.days
$UserName=$_.GivenName
$SurName=$_.Surname
if ($display -lt 14 -and $display -gt 0)
{
$MyVariable = @“
Sehr geehrte/r $UserName $Surname,
Ihr Kennwort wird in $display Tagen ablaufen. Sollten Sie es nicht rechtzeitig ändern, wird das Internet abgeschaltet 🙂
Mit freundlichen Grüßen,
EDV-Abteilung
*** Diese Nachricht wurde automatisch generiert – bitte nicht darauf antworten. ***
„@
send-mailmessage -to $_.EmailAddress -from kennwortwarnung@domain.de -Subject „IT Information: Ihr Kennwort wird in $display Tagen ablaufen“ -body $MyVariable -smtpserver smtp.domain.de -encoding ([System.Text.Encoding]::UTF8)
}
}
———————————————
Erläuterung:
OU=OU1,DC=domain,DC=de > durch entsprechende OU-Struktur ersetzen (durch den Schalter „-SearchScope Subtree“ werden Unter-OUs inkludiert)
$display -lt 14 > 14 = Zeitraum in Tagen bevor das Kennwort abläuft. Während des definierten Zeitraums wird der Benutzer bei Ausführung des Skripts gewarnt.
Sehr geehrte/r… > Benachrichtigungsinhalt nach eigenem Geschmack gestalten.
kennwortwarnung@domain.de > Austauschen gegen gewünschte Absenderadresse.
smtp.domain.de > Email-Server
2.) Benachrichtigungsskript in die Windows-Aufgabenplanung einbinden
– In Aufgabenplanung „Neue einfache Aufgabe“ erstellen
– Name & Zeitplan festlegen
– Aktion: Programm starten
– Programm starten:
> Programm / Skript: %SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe
> Argumente hinzufügen (optional): -command C:\Temp\password.ps1
– Anschließend die Aufgabe bearbeiten und unter „Allgemein“ die Haken „Unabhängig von der Benuzteranmeldung ausführen“ und „Mit höchsten Privilegien ausführen“ setzen
Quellen:
Technet-Forum
Technet
Mike Pfeiffer
11 Antworten zu “Benutzer per Email über Ablauf des Windows-Kennworts benachrichtigen”
Hallo,
ich finde diesen Ansatz super, bei der Ausführung stoße ich aber immer auf folgendes Problem:
Das Argument „1“ mit dem Wert „04.04.2013 14:08:06“ für „op_Subtraction“ kann nicht in den Typ „System.TimeSpan“ konve
rtiert werden: „Der Wert „04.04.2013 14:08:06“ kann nicht in den Typ „System.TimeSpan“ konvertiert werden. Fehler: „Ung
ültige Umwandlung von „System.DateTime“ in „System.TimeSpan“.““
Bei Zeile:1 Zeichen:23
+ $daysleft=$ExpiryDate- <<<< $today
+ CategoryInfo : NotSpecified: (:) [], MethodException
+ FullyQualifiedErrorId : MethodArgumentConversionInvalidCastArgument
Der Fehler ist mir klar, allerdings habe ich keine Idee, wir ich die Umwandlung jetzt hinbekomme? Hast Du das einen Ansatz für mich?
Vielen Dank!
Ralf
Hallo Ralf,
hast du „$daysleft=$ExpiryDate-$today“ durchgehend zusammen geschrieben; sprich ohne Leerschritt nach dem – ?
„$daysleft=$ExpiryDate- <<<< $today"
VG
Pascal
Hallo Pascal
Ich würde gerne dein Script einsetzen.
Jedoch kommt folgende Abfrage, wenn ich das Script ausführen will:
Cmdlet ForEach-Object an der Befehlspipelineposition 2
Geben Sie Werte für die folgenden Parameter an:
Process[0]:_
Ich bin leider nicht sehr gut mit Scripten, daher hoffe ich du kannst mir weiterhelfen.
Vielen Dank!
Grüsse
Jonas
Hallo Pascal
Habe das Script auch getestet und die einzelnen Zeilen von Hand auf der PS getestet. Jedoch erhalte ich wie Jonas schon bei der Abfrage der User den gleichen Fehler.
„Cmdlet ForEach-Object an der Befehlspipelineposition 2
Geben Sie Werte für die folgenden Parameter an:
Process[0]:_“
Die OU und DC habe ich schon überprüft, diese Angaben stimmen.
Vielen Dank für eine Rückmeldung.
Liebe Grüsse
Miki
Hallo Miki,
auf welcher OS-Version führst du das Script aus? Getestet habe ich das Ganze seinerzeit unter Win 2008 R2.
VG
Pascal
Hallo Pascal,
Teste es auch auf Win Server 2008 R2.
Gruss
Miki
Hallo Miki,
füge bitte die geschweifte Klammer in die selbe Zeile wie foreach.
Also:
… | foreach {
$PasswordSetDate …
VG
Pascal
Hallo Pascal
Vielen Dank für die Hilfe, hat nun alles funktioniert!!
Liebe Grüsse
Miki
Noch ein Zusatz: Damit die Umlaute des Textes auch im Mail richtig dargestellt werden, kann nach dem „-smtpserver“ Parameter folgender angefügt werden:
-encoding ([System.Text.Encoding]::UTF8)
Gruss
Milos
Hallo Pascal,
auch ich bekomme immernoch folgende Fehlermeldung:
Das Argument „1“ mit dem Wert „23.04.2014 11:02:06“ für „op_Subtraction“
rtiert werden: „Der Wert „23.04.2014 11:02:06“ kann nicht in den Typ „Syst
ültige Umwandlung von „System.DateTime“ in „System.TimeSpan“.““
Bei Zeile:7 Zeichen:23
+ $daysleft=$ExpiryDate- <<<< $today
+ CategoryInfo : NotSpecified: (:) [], MethodException
+ FullyQualifiedErrorId : MethodArgumentConversionInvalidCastArgument
Das Argument "1" mit dem Wert "23.04.2014 11:02:08" für "op_Subtraction"
rtiert werden: "Der Wert "23.04.2014 11:02:08" kann nicht in den Typ "Syst
ültige Umwandlung von "System.DateTime" in "System.TimeSpan".""
Bei Zeile:7 Zeichen:23
+ $daysleft=$ExpiryDate- <<<< $today
+ CategoryInfo : NotSpecified: (:) [], MethodException
+ FullyQualifiedErrorId : MethodArgumentConversionInvalidCastArgument
Durchgehend zusammen geschrieben ist auch dieser Teil … wie oben beschrieben…wo kann der Fehler noch zu finden sein?!
Gruß Norbert
Hallo Norbert und für alle anderen die evtl auch über diesen Post stolpern und testen.
ich hatte auch die fehlermeldung:
“ Das Argument „1“ mit dem Wert „23.04.2014 11:02:08“ für „op_Subtraction“
rtiert werden: „Der Wert „23.04.2014 11:02:08“ kann nicht in den Typ „Syst
ültige Umwandlung von „System.DateTime“ in „System.TimeSpan“.““
Bei Zeile:7 Zeichen:23 “
schaut euch eure accounts mal genauer an bei mir war das z.b. dass das kennwort bei der ersten anmeldung gesetzt wreden muss
dazu habe ich unter
„$today=get-date
$ExpiryDate=$passwordSetDate + $maxPasswordAgeTimeSpan“
die zeile
write „$UserName $Surname“
eingefügt. der nutzer der unter der fehlermeldung erscheint ist der mit dem fehler.