Benutzer per Email über Ablauf des Windows-Kennworts benachrichtigen


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”

  1. 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

  2. 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

  3. 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

  4. 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

  5. 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

  6. 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.

Schreibe einen Kommentar zu Miki Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert