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 und auch das importieren und exportieren der CSV. Nur das aktualisieren der Daten, wann ein Eintrag dazukommt, bzw. wie lange er schon drin steht, da stehe ich mit meinem Grundwissen vor einem Problem. Hat noch jemand ein Tip für mich. Folgendes Skript habe ich schon:
Code:
#!/usr/bin/env powershell
Import-Module -Name ActiveDirectory
#Variablen
$TodayTime = Get-Date
$Today = 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 = '//xx.own/NETLOGON/Passwort.csv'
If (!(Test-Path -Path ('{0}' -f $StatusFile))) {
New-Item -Path '//xxx.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 '*@xxx.*' } -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 += [PSCustomObject]@{
'sAMAccountName' = $NutzerName
'EMailVersand' = $Today
}
}
}
$UsersWithOldPasswordFromAD | Export-Csv -Path $StatusFile -NoTypeInformation
Import-Csv $StatusFile
$existingEntry = $UserFromCSV.Where({$_.sAMAccountName -eq $ADUser.SamAccountName})
if ($existingEntry.count -gt 0)
{
$LastReminderDays = ((Get-Date) - $ADUser.Emailversand).Days
if ($LastReminderDays -gt 365)
{ $UsersWithOldPasswordFromAD += [PSCustomObject]@{
'EMailVersand' = Get-Date -UFormat '%d.%m.%Y'
}
}
}
else {$UsersWithOldPasswordFromAD += [PSCustomObject]@{
'sAMAccountName' = $NutzerName
}
$UsersWithOldPasswordFromAD | Export-Csv -Path $StatusFile -NoTypeInformation
}