Hallo,
ich bin neu im Administratorenbereich und erst recht was Skripten mit Powershell betrifft. Nach Einsteigernbüchern und einen Onlinegrundkurd habe ich folgende Aufgabe bekommen:
Eine Info-E-Mail an die Benutzer senden , wenn ihr Kennwort ein Jahr alt geworden ist (ohne es zu ändern). Die E-Mail soll über das alter Informieren und die Benutzer darauf hinweisen, dass das Kennwort bitte zu ändern ist wenn es öffentlich bekannt wurde. Der Kennwortwechsel soll nicht erzwungen werden!
Die Info soll immer zum Geburtstag des Kennwortes kommen, also auch bei zwei Jahre, drei Jahre, ...
Das Auslesen und Berechnen des Kennwortalters klappt ganz gut mit folgendem Skript:
Import-Module -Name ActiveDirectory
#Variablen
$TodayTime = Get-Date
$null = Get-Date -UFormat '%d.%m.%Y'
$WarningLevel = 365
$UsersWithOldPasswordFromAD = New-Object -TypeName System.Collections.ArrayList
$UsersWithOldPasswordFromFile = New-Object -TypeName System.Collections.ArrayList
$FileArray = New-Object -TypeName System.Collections.ArrayList
# PW Versandliste
[String]$StatusFile = '//abc.own/NETLOGON/Passwort.csv'
If (!(Test-Path -Path ('{0}' -f $StatusFile))) {
New-Item -Path '//abc.own/NETLOGON' -Name 'Passwort.csv' -ItemType 'file'
}
#alle aktiven AD-User mit E-Mail-Adresse (außer Systembenutzer)
$AllADUsers = Get-ADUser -Filter { Enabled -eq $True -and PasswordNeverExpires -eq $False -and Mail -like '*@abc.*' } -Properties PasswordLastSet,Mail
#Berechnung des Kennwortalters
ForEach ($ADUser in $AllADUsers)
{
$NutzerName = $ADUser.SamAccountName
$null = $ADUser.Mail
$PasswordLastSet = $ADUser.PasswordLastSet
# Wenn Benutzer von Admins in der AD erstellt wurden, und das Initial-Passwort vom Benutzer noch nicht geändert wurde, dann ist PasswordLastSet nicht gesetzt (NULL)
# In diesem Fall, setzten wir PasswordLastSet auf Heute, damit die Berechnung "0" ergibt
If(! $PasswordLastSet) {
$PasswordLastSet = $TodayTime
}
$PasswordAge = ($TodayTime-$PasswordLastSet).Days
if ($PasswordAge -ge $WarningLevel)
{
$UsersWithOldPasswordFromAD += $ADUser.SamAccountName
}
}
Wo ich jetzt aber scheitere ist diese User in Datei schreiben, wenn diese noch nicht drin stehen, und wenn sie drin stehen mit dem Datum zu vergleichen, wann sie die letzte Mail bekommen haben. Da diese Skript jeden Tag laufen soll und wir die User nicht zu bombadieren wollen. Mein Ansatz dafür ist
# Datei mit historischen Daten einlesen
foreach($line in (Get-Content $StatusFile2)) {
$FileArray += $line
}
foreach ($ADUser in $UsersWithOldPasswordFromAD)
{
foreach ($line in $FileArray) {
#$FileUser = Import-Csv "$Statusfile2" -Header name
#$FileDate = Import-Csv "$Statusfile2" -Header datum
if($ADUser -ne $FileArray.name)
{
Write-Host "$ADUser steht drin"
}
Wenn jemand mir auf die Sprünge helfen kann?