ISA Server FAQ Home | ISA 2000 | ISA 2004 | ISA 2006 | TMG | Verschiedenes | Tools | Downloads | Links | Das Buch! | Bücher | User Group | Events | Blog | About | Sitemap | Suche

Kapitel höher
Unzustellbarkeitsbenachrichtigung
Autoresponder
Datenbanken verschieben
Produktversion
Kontakte und PDA
Exchange 2007 AgentLog
Dynamische Verteilergruppen
Vista Passwortablauf
Zeitsynchronisierung
Royal TS
SMTP Diagnostic
Logfiles lesen
ISO-Image als CD
IP Subnetze
Private IP Adressbereiche
MIME-Typen
Bekannte Ports
Office 365 Passwort
Malware melde

 

Tool zur automatischen Passwortablaufverwaltung unter Vista - von Christian Gröbner


Die Informationen in diesem Artikel beziehen sich auf:

  • Windows Vista
  • Windows Server 2008

 

Unter Windows XP war man bei der Anmeldung gezwungen sein Kennwort zu ändern, sofern dies am heutigen Tag abläuft. Bei Vista hat sich dieses Verhalten leider geändert und man erhält nicht mehr automatisch die Aufforderung zur Kennwortänderung, sondern bekommt den Hinweis auf den Kennwortablauf über einen Ballon-Tip angezeigt. Aus eigener Erfahrung musste ich feststellen, dass diese Änderung nicht gerade wünschenswert ist. Zunächst hatte ich per Gruppenrichtlinie alle Ballon-Tips deaktiviert, somit sah man nur ein kleines Schlüsselsymbol in der Taskleiste rechts neben der Uhr, welches ich zunächst für eine Aktivierungsmeldung von Vista gehalten hatte. Nachdem ich die Ballon-Tips wieder aktiviert habe erschien auch ein großer Hinweis auf den Kennwortablauf. Wie jede Fehlermeldung auch, kann man diesen Ballon-Tip einfach ignorieren und weg klicken, was zumindest die meisten Benutzer machen, denn der Ballon-Tip fordert einen auf eine Tastenkombination zu drücken, was für den Benutzer in Arbeit enden könnte. Problem hierbei ist, dass das Kennwort z.B. noch bis 10.30 Uhr gültig ist und sich der Benutzer problemlos vorher anmelden kann. Nach 10.30 Uhr tauchen dann die ersten Probleme mit dem Zugriff auf, da das Kennwort ja abgelaufen ist und geändert werden muss. Outlook 2007 in Verbindung mit Exchange 2007 sperrt hier den Hahn zu, da z.B. kein Zugriff mehr auf die Webservices von Exchange 2007 mehr möglich ist. Der Benutzer wird darauf hin aufgefordert in einem grauen Authentifizierungsfenster gültige Anmeldeinformationen einzugeben. Gibt der Benutzer jetzt aus lauter Verwirrung diverse Kennwörter ein wird der Account zusätzlich noch gesperrt, sofern dies konfiguriert ist. Ende vom Lied ist meistens, dass hier die IT-Administration angerufen wird und nach einer Lösung gefragt wird. Ist der Account zudem noch gesperrt ist dies ein zusätzlicher Aufwand, der eigentlich nicht sein müsste.

Auf der Suche nach einer Lösung bin ich mit der Suchmaschine meiner Wahl nicht wirklich auf eine Lösung gestoßen, somit musste ich mir etwas überlegen. Zunächst habe ich versucht mittels vbscript hier etwas zu schreiben, doch dann bin ich auf die PowerShell Commands for Active Directory von Quest gestoßen, mit denen man ganz einfach das AD mittels Powershell verwalten kann.

Folgendes Powershell-Skript sucht automatisch die Benutzer aus dem Active Directory heraus, deren Kennwort am heutigen Tag abläuft bzw. in den konfigurierbaren nächsten Tagen ablaufen wird und benachrichtigt diese per E-Mail über den Kennwortablauf bzw. setzt den Haken zur Kennwortänderung für das Benutzerobjekt, sofern heute das Kennwort abläuft. Bei erneuter Anmeldung des Benutzers wird dieser somit automatisch aufgefordert sein Kennwort zu ändern.

Folgend werden die einzelnen Schritte zur Installation und Konfiguration beschrieben.

1. Installation der Quest PowerShell Commands for Active Directory

Laden Sie sich zunächst von der Webseite http://www.quest.com/powershell/activeroles-server.aspx die PowerShell Commands for Active Directory für Ihre Plattform herunter und führen Sie anschließend das Installationsprogramm aus.

Hinweis: Für die Quest PowerShell Commands for Active Directory sind das .Net Framework und die Powershell 1.0 erforderlich. Installieren Sie diese bevor Sie die Quest PowerShell Commands for Active Directory installieren!


Beginnen Sie die den Installationsassistenten über die Schaltfläche Next.



Lesen Sie sich die Lizenzbestimmungen durch und akzeptieren Sie diese über die Option I accept the license agreement. Klicken Sie anschließend auf die Schaltfläche Next



Tragen Sie in den Textfelder die Registrierungsinformationen ein und klicken Sie danach auf die Schaltfläche Next.



Starten Sie die Installation über die Schaltfläche Next.



Beenden Sie nach der Installation den Installationsassistenten über die Schaltfläche Finish.

Im Startmenü finden Sie nun die Shell der PowerShell Commands for Active Directory unter dem Eintrag Quest Software.

2. Anpassen des Powershell-Skripts

Für die Verwendung des Skripts müssen Sie dieses auf Ihre Anforderungen anpassen. Die folgende Auflistung enthält alle konfigurierbaren Parameter und deren Bedeutung.
 

$days Tage die das Skript voraus nach Benutzern suchen soll, deren Kennwort in diesem Zeitraum abläuft
$container Die Organisationseinheit aus dem AD in der nach Benutzern gesucht werden soll
$query Die LDAP-Abfrage für die Suche nach Benutzern. Standard ist (&(objectcategory=user)(useraccountcontrol=512)), wodurch nach Benutzern gesucht wird, deren Kennwort ablaufen kann
$text Der Text für den Eintrag in das Eventlog.
$server Der Mailserver für den Versand der E-Mail-Benachrichtigung
$from E-Mail-Adresse des Absenders der E-Mail-Benachrichtigungen
$Subject Betreff für die E-Mail-Benachrichtigung
$template Datei, welche als Vorlage für die E-Mail verwendet wird

Die aufgeführten Parameter sind in folgendem Listing rot gekennzeichnet.

 
###############################################################################

Dieses Powershell-Skript setzt am Tag des Kennwortablaufs den Haken zur Kennwortänderung für
den Benutzer. Sofern das Kennwort noch nicht abgelaufen ist, können Sie konfigurieren ab wie
vielen Tagen der Benutzer eine Benachrichtigung über den Kennwortablauf erhalten soll.

Für den Betrieb dieses Skripts sind die Powershell und die PowerShell Commands for Active
Directory von Quest erforderlich. Die Powershell Commands können Sie unter der URL
http://www.quest.com/powershell/activeroles-server.aspx herunter laden.

Die Verwendung dieses Skripts erfolgt auf eigene Verantwortung.
Es wird keine Haftung für eventuelle Schäden übernommen!

geschrieben von Christian Gröbner [MVP Forefront]

###############################################################################

function write-Eventlog([string]$uname)
{

  $text = "Das Kennwort für den Benutzer " + $uname + " wurde zur Änderung aktiviert."

  $Eventlog = new-object System.Diagnostics.EventLog('Application')
  $Eventlog.MachineName = "."
  $Eventlog.Source = "Kennwort-Manager"
  $Eventlog.WriteEntry($text)

}

function send-EMail([string]$uname, [string]$email, [int]$number)
{

  $server = "192.168.100.1"
  $from = "postmaster@domain.local"
  $subject = "Ihr Kennwort läuft demnächst ab!"
  $template = "C:\Skripte\password.html"

  $body = get-Content $template
  $replace=[regex]"#TAGE#"
  $body = $replace.Replace($body,$number,1)
  $replace=[regex]"#NAME#"
  $body = $replace.Replace($body,$uname,1)

  [System.Net.Mail.MailMessage]$message = New-Object System.Net.Mail.MailMessage($from, $email, $subject, $body)
  $message.IsBodyHTML = $true

  if ($number -eq 1) {$message.Priority ="High"}

  [System.Net.Mail.SmtpClient]$smtpclient = New-Object System.Net.Mail.SmtpClient($server)
  $smtpclient.Send($message)

}

### Begin Main

$days = 5
$container = "domain.local/Benutzer"
$query = "(&(objectcategory=user)(useraccountcontrol=512))"

for ($day = 0; $day -le $days; $day++)
{

   $user =""
   $users = Get-QADUser -SearchRoot $container -LdapFilter $query -SearchScope:Subtree | Where {$_.PasswordExpires.Date -eq ([datetime]::Now.Date.AddDays($day))}

    foreach ($user in $users)
     {
       if ($user -ne $null)
       {
        
           if ($day -eq 0)
           {
             write-Eventlog $user.Name
             set-qaduser -identity $user.NTAccountName -UserMustChangePassword $true
           }
           else
           {
             send-EMail $user.Name $user.EMail $day
           }
       }
     }
}

### End Main
 

Neben dem Skript wird noch eine HTML-Datei benötigt, die den Text für die E-Mail-Benachrichtigung enthält. Dieser Text kann wie folgt aussehen:

 
Hallo #NAME#,

Ihr Kennwort läuft in #TAGE# Tagen ab.

Führen Sie zur Änderung Ihres Kennworts folgende Schritte aus:

1. Drücken Sie STRG + ALT + ENTF, und klicken Sie dann auf Kennwort ändern.

2. Geben Sie zuerst das alte und dann das neue Kennwort ein, geben Sie das neue Kennwort zur Bestätigung erneut ein, und drücken Sie dann die EINGABETASTE.

Bei Fragen wenden Sie sich bitte an die die IT-Administration unter der Durchwahl: 0815

 

Kopieren Sie sich den Inhalt für das Powershell-Skript in eine Textdatei und nehmen Sie danach die Änderungen an den Parametern vor. Speichern Sie die Datei anschließend auf dem Server unter dem Dateinamen password.ps1. Gleiches gilt für die HTML-Datei. Kopieren Sie ebenfalls den Inhalt in eine Textdatei und passen Sie ggf. den Inhalt an. Speichern Sie danach die Datei unter dem Dateinamen password.html ab.

2.1 Funktionsbeschreibung

2.1.1 Main

Main beschreibt die Startroutine des Skripts. Zunächst werden die Parameter $days, $container und $query festgelegt. Anschließend werden in einer Schleife die Benutzer ermittelt, deren Kennwort heute abläuft bzw. im Zeitraum bis zu in dem Parameter $days festgeleten Tagen ablaufen wird. Enthält die Suche Benutzer aus dem AD, dann wird geprüft, ob das Kennwort heute abläuft ($day = 0). Sofern dies der Fall ist, wird ein Eintrag im Eventlog vorgenommen und die Kennwortänderung für den Benutzer gesetzt. Läuft das Kennwort in den nächsten Tagen ab, wird der Benutzer per E-Mail darüber benachrichtigt.

2.1.2 Funktion write-Eventlog

Die Funktion write-Eventlog fügt der Ereignisanzeige im Anwendungsprotokoll einen Eintrag hinzu, die den Administrator darüber informiert, dass für den Benutzer die Kennwortänderung aktiviert wurde. Der Benutzername wird in der Variable $uname übergeben. Der Text für den Eintrag wird über die Variable $text festgelegt.

2.1.3 Funktion send-EMail

Die Funktion send-EMail verschickt die Benachrichtigungen an die Benutzer, dass Ihr Kennwort in x Tagen ablaufen wird. Zu Beginn werden die Parameter $from, $template, $subject und $server festgelegt. Danach wird der Inhalt der in der Variablen $template angegebenen Datei als Body für die E-Mail in die Variable $body geladen. Im Textinhalt der Variablen $body wird anschließend nach den Markierungen #NAME# und #TAGE# gesucht und diese mittels der Methode Replace durch die richtigen Werte ersetzt, die als Parameter ($number und $uname) beim Funktionsaufruf übergeben werden. Im Anschluß wird die E-Mail generiert und an die E-Mail-Adresse des Benutzers, die ebenfalls als Parameter beim Funktionsaufruf ($email) übergeben wird, versendet. Wenn das Kennwort am nächsten Tag abläuft, wird die E-Mail zusätzlich mit hoher Priorität versendet.

3. Erstellen eines geplanten Tasks

Öffnen Sie auf dem Server den Servermanager und navigieren Sie zum Knoten Konfiguration -> Aufgabenplanung und starten Sie den Assistenten aus dem Kontextmenü über den Eintrag Einfache Aufgabe erstellen.



Tragen Sie in den Textfeldern einen Namen und eine Beschreibung für den geplanten Task ein und klicken Sie auf die Schaltfläche Weiter.



Geben Sie an, wann der geplante Task ausgeführt werden soll. Wählen Sie dort die Option Täglich aus und klicken Sie auf die Schaltlfäche Weiter.



Tragen Sie als Uhrzeit eine Uhrzeit ein, die auf jeden Fall vor dem Arbeitsbeginn liegt, damit die Benutzerkonten vorher aktualisiert werden. Klicken Sie danach auf die Schaltfläche Weiter.



Wählen Sie in diesem Schritt als Aktion die Option Programm starten aus und klicken Sie auf die Schaltfläche Weiter.



In den Textfeldern Programm und Argumente tragen Sie folgende Werte ein:

Programm :%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe
Argumente :-psconsolefile "%ProgramFiles%\Quest Software\Management Shell for AD\ConsoleSettings.psc1" -command "&{C:\skripte\password.ps1}"

Klicken Sie danach auf die Schaltfläche Weiter.



Setzen Sie den Haken im Kontrollkästchen Beim Klicken auf "Fertig stellen" die Eigenschaften für dies Aufgabe öffnen und beenden Sie den Assistenten.



Setzen Sie unter der Registerkarte Einstellungen den Haken bei Mit höchsten Privilegien ausführen und wählen Sie zudem die Option Unabhängig von der Benutzeranmeldung ausführen. Schließen Sie danach das Fenster über die Schaltfläche OK.

Würden Sie den Task jetzt starten, würde das Skript nicht ausgeführt werden, das die Execution-Policy dies verhindert. Standard ist hierbei, dass nur signierte Skripte ausgeführt werden dürfen. Sie können hierfür entweder die Execution-Policy mit dem Powershell-Befehl Set-ExecutionPolicy RemoteSigned herab setzen oder das Skript digital signieren. Näheres zum digitalen signieren von Skritpen lesen sie in diesem Artikel .

 

Stand: Friday, 28. August 2009/CG.


Home | ISA 2000 | ISA 2004 | ISA 2006 | TMG | Verschiedenes | Tools | Downloads | Links | Das Buch! | Bücher | User Group | Events | Blog | About | Sitemap | Suche

Fragen oder Probleme in Zusammenhang mit dieser Website richten Sie bitte an den Webmaster. Bitte inhaltliche oder technische Fragen ausschließlich in der deutschen ISA Server Newsgroup stellen.
Verbesserungsvorschläge, Anregungen oder Fremdartikel sind jederzeit willkommen! Copyright 2001-2011. Alle Rechte vorbehalten. msisafaq.de steht in keiner Beziehung zur Microsoft Corp.
Stand: Monday, 18. March 2013 / Dieter Rauscher