Windows Server 2008 R2 Kennwortrichtlinie - Verständnisfrage

Sebastian5

Newbie
Registriert
Nov. 2015
Beiträge
6
Hallo zusammen,

ich bin dabei die Einführung einer Kennwortrichtlinie vorzubereiten.
Dazu tun sich bei mir ein paar Fragen auf, die ich hier mal auf Euch loslassen möchten, in der Hoffnung auf Erklärung :)

Ich würde gerne, dass das Kennwort nach 90 Tagen geändert werden muss und der User nach 80 Tagen darauf aufmerksam gemacht wird, sein Kennwort zu ändern. Stelle ich dann bei "Maximales Kennwort" 90 Tage und bei "Minimales Kennwort" 80 Tage ein?

Zu den Benachrichtigungen: Ist es möglich per Email darauf hingewiesen zu werden, dass man sein Kennwort ändern soll?
Unser Außendienst ist sehr selten hier im Haus und würde die Benachrichtigung ja ohne Anmeldung an der Domäne nicht bekommen.

Viele Grüße
Sebastian
 
per email musst du nen externes script einsetzen.

hab ich selber hier, such ich grad mal raus, mom

/edit

irgendwo nen ordner anlegen und dort drin:
cmd erstellen:

password.cmd
set v=%date%.log

cscript "PasswordExpiryEmail.vbs" >> %v%

exit

und vbs erstellen :
PasswordExpiryEmail.vbs
Option Explicit

Dim objCommand, objConnection, objChild, objUserConnection, strBase, strFilter, strAttributes, strPasswordChangeDate, intPassAge
Dim lngTZBias, objPwdLastSet, strEmailAddress, objMessage
Dim objShell, lngBiasKey, k, PasswordExpiry, strRootDomain, strFromEmailAdd, strBCCEmailAdd, strSMTPServerName, strSMTPServerPort
Dim strQuery, objRecordset, strName, strCN

' ********************* CHANGE THESE VALUES TO PASSWORD EXPIRY AND ROOT OF WHERE USERS WILL BE SEARCHED ***********************************

PasswordExpiry=90
strRootDomain="dc=domäne,dc=local"
strFromEmailAdd="absender@domäne.de"
strBCCEmailAdd="blindkopie@domäne.de"
strSMTPServerName="exchangeserver.domäne.local"
strSMTPServerPort=port (normal isses 25)

' *****************************************************************************************************************************************


' Obtain local Time Zone bias from machine registry.
Set objShell = CreateObject("Wscript.Shell")
lngBiasKey = objShell.RegRead("HKLM\System\CurrentControlSet\Control\TimeZoneInformation\ActiveTimeBias")
If UCase(TypeName(lngBiasKey)) = "LONG" Then
lngTZBias = lngBiasKey
ElseIf UCase(TypeName(lngBiasKey)) = "VARIANT()" Then
lngTZBias = 0
For k = 0 To UBound(lngBiasKey)
lngTZBias = lngTZBias + (lngBiasKey(k) * 256^k)
Next
End If

Set objCommand = CreateObject("ADODB.Command")
Set objConnection = CreateObject("ADODB.Connection")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"
objCommand.ActiveConnection = objConnection
strBase = "<LDAP://" & strRootDomain & ">"

' strFilter = "(&(objectCategory=person)(objectClass=user))"
strFilter = "(&(objectCategory=person)(objectClass=user) (!userAccountControl:1.2.840.113556.1.4.803:=2)(!userAccountControl:1.2.840.113556.1.4.803:=65536))"
strAttributes = "sAMAccountName,cn,mail,pwdLastSet,distinguishedName"
strQuery = strBase & ";" & strFilter & ";" & strAttributes & ";subtree"
objCommand.CommandText = strQuery
objCommand.Properties("Page Size") = 100
objCommand.Properties("Timeout") = 30
objCommand.Properties("Cache Results") = False
Set objRecordSet = objCommand.Execute

' WScript.echo "Running at " & Date()

Do Until objRecordSet.EOF
strName = objRecordSet.Fields("sAMAccountName").Value
strCN = objRecordSet.Fields("cn").value
strEmailAddress = objRecordSet.Fields("mail").value
Wscript.Echo "NT Name: " & strName & ", Common Name: " & strCN & ", Email Address:" & strEmailAddress

Set objUserConnection = GetObject("LDAP://" & objRecordSet.Fields("distinguishedName").Value)
Set objPwdLastSet = objUserConnection.pwdLastSet
strPasswordChangeDate = Integer8Date(objPwdLastSet, lngTZBias)
WScript.Echo vbTab & "Password last changed at " & strPasswordChangeDate
intPassAge = DateDiff("d", strPasswordChangeDate, Now)
WScript.Echo vbTab & "Password changed " & intPassAge & " days ago"

If intPassAge = (PasswordExpiry-3) Then
WScript.echo vbTab & "Sending user notification to " & strEmailAddress & " that password expires in 3 days"
Call SendEmailMessage(strEmailAddress, 3)
ElseIf intPassAge = (PasswordExpiry-6) Then
WScript.echo vbTab & "Sending user notification to " & strEmailAddress & " that password expires in 6 days"
Call SendEmailMessage(strEmailAddress, 6)
ElseIf intPassAge = (PasswordExpiry-9) Then
WScript.echo vbTab & "Sending user notification to " & strEmailAddress & " that password expires in 9 days"
Call SendEmailMessage(strEmailAddress, 9)
End If

objRecordSet.MoveNext
Loop

objConnection.Close


Function Integer8Date(objDate, lngBias)
' Function to convert Integer8 (64-bit) value to a date, adjusted for
' local time zone bias.
Dim lngAdjust, lngDate, lngHigh, lngLow
lngAdjust = lngBias
lngHigh = objDate.HighPart
lngLow = objdate.LowPart
' Account for error in IADslargeInteger property methods.
If lngLow < 0 Then
lngHigh = lngHigh + 1
End If
If (lngHigh = 0) And (lngLow = 0) Then
lngAdjust = 0
End If
lngDate = #1/1/1601# + (((lngHigh * (2 ^ 32)) _
+ lngLow) / 600000000 - lngAdjust) / 1440
' Trap error if lngDate is overly large
On Error Resume Next
Integer8Date = CDate(lngDate)
If Err.Number <> 0 Then
On Error GoTo 0
Integer8Date = #1/1/1601#
End If
On Error GoTo 0
End Function

Sub SendEmailMessage(strDestEmail, strNoOfDays)
WScript.echo "Sending Email to:" & strDestEmail
Set objMessage = CreateObject("CDO.Message")
objMessage.Subject = "Your Password Expires in " & strNoOfDays & " days"
objMessage.From = strFromEmailAdd
objMessage.To = strDestEmail
objMessage.Bcc = strBCCEmailAdd
objMessage.TextBody = "Your password expires in " & strNoOfDays & " days." & vbCRLF & "Please change your password now to prevent your Account " & vbCRLF & " " & strName & " " & vbCRLF & " getting locked out of the network."
objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = strSMTPServerName ' Your mailserver here
objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = strSMTPServerPort
objMessage.Configuration.Fields.Update
objMessage.Send
End Sub
vbs script noch bearbeiten (domäne, absender , exhcnagen etc. ganz oben im script)
danach per aufgabenplanung das cmd einmal täglich ausführen lassen , fertig
das skript schickt 9 tage vorher, 6tage vorher und 3 tage vorher eine meldung per email (kann man im vbs script je nach wunsch anpassen)
 
Zuletzt bearbeitet:
En3rg1eR1egel schrieb:
per email musst du nen externes script einsetzen.

hab ich selber hier, such ich grad mal raus, mom

Ok, vielen Dank!

@desmond.
Ergänzung ()

Danke, auf der Seite steht aber leider nicht, ob dann die Benachrichtigung nach den 80 Tagen rausgeht
 
Zuletzt bearbeitet:
Das müsste unter:" Interaktive Anmeldung: Anwender vor Ablauf des Kennworts zum Ändern des Kennworts auffordern" gehen.

Im Standard müssten das 5 Tage sein.
 
desmond. schrieb:
Das müsste unter:" Interaktive Anmeldung: Anwender vor Ablauf des Kennworts zum Ändern des Kennworts auffordern" gehen.

Im Standard müssten das 5 Tage sein.

Prima, vielen Dank. Gucke ich mir an!

@En3rg1eR1egel
Vielen Dank für das Script, gucke ich mir auch an.
 
Hallo,

eine Frage habe ich noch zu dem Script.
Um dies auch zu testen, würde ich gerne eine OU mit angeben, so dass nicht jeder Benutzer einen Hinweis bekommt.

Ich bin jetzt nicht der große Programmierer, aber würde es reichen wenn ich strRootOU="TEST" vor strRootDomain="dc=domäne,dc=local" setze?

Gruß
Sebastian
 
Jetzt weiß ich wieder warum VB so ein Scheiß ist. :D In Powershell wäre das ne Geschichte von wenigen Zeilen - also das gesamte Script, nicht nur deine Änderung... Sorry, aber bei VB bin ich raus. ;)
 
Zurück
Oben