Hat man häufig wechselnde Benutzer in seinem Active Directory (wie z.B. bei mir an der Hochschule, oder auch bei Lehrlingen, Werkstudenten oder ähnlichem), dann ist es sinnvoll, die Benutzerkonten dieser Personenkreise von vornherein mit einem Ablaufdatum zu versehen:
Ein mögliches Problem hierbei ist, dass die Benutzer erst NACH dem Ablauf feststellen, dass sie nicht mehr arbeiten können und sich bis zur Verlängerung durch einen Admin daran auch nichts ändert. Also wäre es doch schön, wenn die Benutzer schon vor dem Ablaufdatum daran erinnert werden, um sich zeitnah zu melden. Eine mögliche Lösung hierfür liegt wie so oft in einem PowerShell-Skript.
Der Kern des Skriptes ist die Suche nach den relevanten Accounts. Dazu dient “Search-ADAccount”:
Search-ADAccount -AccountExpiring -TimeSpan „32“
Diese Abfrage liefert alle Accounts, die in den nächsten 32 Tagen ablaufen (32 habe ich hier gewählt, um bei monatlicher Ausführung des Skriptes niemanden zu “vergessen”.
Der Rest ist dann eher schmückendes Beiwerk. Mit einer Schleife wird über alle entsprechenden Benutzer iteriert und jedem eine passende E-Mail gesendet:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
| Import-Module ActiveDirectory
# Werte wie gewünscht anpassen:
[int]$AnzahlTage = 32
[TimeSpan]$Zeitraum = New-TimeSpan -Days $AnzahlTage
[string]$subject = "Ihr Benutzeraccount wird in den nächsten 31 Tagen ablaufen!"
[string]$MailSender = "ich@domain.de"
[string]$MailServer = "mail.server.com"
ForEach($ExpiringUser in (Search-ADAccount -AccountExpiring -TimeSpan $Zeitraum | Get-ADObject -Properties samaccountname,mail,accountExpires))
{
$ExpDate = [datetime]::FromFileTime($($ExpiringUser.accountExpires))
$body =
"Werter Benutzer!`r
`r
Ihr Benutzerkonto `"$($ExpiringUser.samaccountname)`" wird in den kommenden 31 Tagen ablaufen. Das genaue Ablaufdatum lautet:`r
`r
$(Get-Date ($ExpDate.AddDays(-1)) -Format "dd.MM.yyyy")`r
`r
Mit freundlichen Grüßen,`r
Ihre IT-Abteilung"
Send-MailMessage -From $MailSender -To $ExpiringUser.mail -Subject $subject -Body $body -SmtpServer $MailServer -Encoding UTF8 -Priority High -Bcc $MailSender
} |
Import-Module ActiveDirectory
# Werte wie gewünscht anpassen:
[int]$AnzahlTage = 32
[TimeSpan]$Zeitraum = New-TimeSpan -Days $AnzahlTage
[string]$subject = "Ihr Benutzeraccount wird in den nächsten 31 Tagen ablaufen!"
[string]$MailSender = "ich@domain.de"
[string]$MailServer = "mail.server.com"
ForEach($ExpiringUser in (Search-ADAccount -AccountExpiring -TimeSpan $Zeitraum | Get-ADObject -Properties samaccountname,mail,accountExpires))
{
$ExpDate = [datetime]::FromFileTime($($ExpiringUser.accountExpires))
$body =
"Werter Benutzer!`r
`r
Ihr Benutzerkonto `"$($ExpiringUser.samaccountname)`" wird in den kommenden 31 Tagen ablaufen. Das genaue Ablaufdatum lautet:`r
`r
$(Get-Date ($ExpDate.AddDays(-1)) -Format "dd.MM.yyyy")`r
`r
Mit freundlichen Grüßen,`r
Ihre IT-Abteilung"
Send-MailMessage -From $MailSender -To $ExpiringUser.mail -Subject $subject -Body $body -SmtpServer $MailServer -Encoding UTF8 -Priority High -Bcc $MailSender
}
Das war es dann auch schon. Viel Spaß beim Adaptieren…
Das vollständige Skript kann auch hier heruntergeladen werden:
BenutzerÜberAblaufendesKontoInformieren.ps1