teutone
Goto Top

AD Password Reminder Mail

Hallo liebe Leute,

ich habe vor langer Zeit einmal ein Password Reminder Mail Script erstellt, welches nun nicht mehr so richtig will, wie es soll.

Anbei das Script:
Import-Module ActiveDirectory

Get-ADUser -filter * -properties PasswordLastSet,EmailAddress,GivenName,Surname -SearchBase “OU=Benutzer,OU=Nuernberg,DC=contoso,DC=com” -SearchScope Subtree |foreach {
 
 $PasswordSetDate=$_.PasswordLastSet
 $maxPasswordAgeTimeSpan = $null
 $maxPasswordAgeTimeSpan = (Get-ADDefaultDomainPasswordPolicy).MaxPasswordAge

$today=get-date
 $ExpiryDate=$passwordSetDate + $maxPasswordAgeTimeSpan

$daysleft=$ExpiryDate-$today

$display=$daysleft.days
 $UserName=$_.GivenName
 $SurName=$_.Surname

if ($display -lt 25 -and $display -gt 0)
 {
 $MyVariable = @”
Sehr geehrte/r $UserName $Surname,

Ihr Kennwort wird in $display Tagen ablaufen. Bitte aendern Sie Ihr Kennwort zeitnah.

****Diese Nachricht wurde automatisch generiert. Bitte antworten Sie nicht darauf.

“@
send-mailmessage -to $_.emailaddress -from Support@23gmbh.de -Subject “IT Information: Ihr Kennwort wird in $display Tagen ablaufen.” -body $MyVariable  -smtpserver Server123
 }
 }
**
Das Script läuft einwandfrei, wenn ich in der letzten Zeile statt "$_.emailaddress" eine feste E-Mailadresse eines Empfängers eintrage. Ich bin einfach mittlerweile zu betriebsblind für das Script *duck und weg*.

Ich brauche in jedem Fall dort dynamisch die Empfängermailadresse aus der AD.

Was mache ich falsch, bzw. wie muss diese Zeile korrekt aussehen?

Die Fehlermeldung lautet wie folgt:
Send-MailMessage : Cannot validate argument on parameter 'To'. The argument is null or empty. Provide an argument that is not null or empty, and then try the command again.  
At C:\Scripte\ITpassword.ps1:32 char:22
+ send-mailmessage -to $_.EmailAddress -from Support@23gmbh.de ...
+                      ~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidData: (:) [Send-MailMessage], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.PowerShell.Commands.SendMailMessage**
Vielen Dank vorab für eure Unterstützung.

Content-Key: 392525

Url: https://administrator.de/contentid/392525

Printed on: April 26, 2024 at 10:04 o'clock

Member: erikro
erikro Nov 13, 2018 at 11:02:46 (UTC)
Goto Top
Moin,

ist das nicht

$_.mail

hth

Erik
Member: Teutone
Teutone Nov 13, 2018 at 12:07:21 (UTC)
Goto Top
Hi,

leider funktioniert das Script so auch nicht... .

VG Teutone
Member: erikro
erikro Nov 13, 2018 at 12:14:41 (UTC)
Goto Top
Moin,

dann mach doch mal ein

get-aduser irgendeinuser | select *

um mal zu gucken, ob und wenn ja in welchem Attribut die Adresse eingepflegt ist.

Liebe Grüße

Erik
Member: DerWoWusste
DerWoWusste Nov 13, 2018 at 12:47:41 (UTC)
Goto Top
Moin.

Das Skript funktioniert, sobald bei Deinen AD-Objekten das Attribut "Mail", welches auch auf der Haupteigenschaftsseite als "E-Mailadresse" auftaucht, korrekt gesetzt ist.
Mitglied: 137808
137808 Nov 13, 2018 updated at 13:13:23 (UTC)
Goto Top
Always check the contents of your variables first, before using them! Besides this, your script also doesn't take into account that a user could be under the control of a PSO (password settings object) and thus can have a different max. password age! Common error that most unaware users do not respect with their reminders.

Best regards.
Member: Teutone
Teutone Nov 13, 2018 at 13:58:58 (UTC)
Goto Top
Hallo,

ich habe mal folgenden Befehl auf meine Mailadresse abgesetzt:

Get-ADUser -Filter {EmailAddress -like "*@*"} -Properties

und ich sehe nun alle Eigenschaften zu meinem Account.
Unter anderem gibt es dort die "EmailAddress", die auch gepflegt ist.

Und wie geht es nun weiter?

Gruß Teutone
Member: DerWoWusste
DerWoWusste Nov 13, 2018 updated at 14:06:32 (UTC)
Goto Top
Auf mindestens einem Account wird die Adresse nicht eingepflegt sein - und das gibt dir den Fehler.

Teste folgendes: erzeuge eine Test-OU "Test" als unterOU deiner User-OU. Füge da deinen eigenen oder einen Testuser ein und änder Zeile 3 auf
“OU=Test,OU=Benutzer,OU=Nuernberg,DC=contoso,DC=com” -SearchScope Subtree |foreach {

Passe natürlich auch
if ($display -lt 25 -and $display -gt 0)
so an, dass hinter lt eine Zahl steht, die die Tage bis zur Änderung deines eigenen Kennwortes überschreitet.
Member: erikro
erikro Nov 13, 2018 at 14:31:03 (UTC)
Goto Top
Moin,

so geht's:

$users = Get-ADUser -filter * -properties PasswordLastSet,mail,GivenName,Surname -SearchBase OU=Benutzer,OU=Nuernberg,DC=contoso,DC=com” -SearchScope Subtree 

foreach($user in $users) {

$PasswordSetDate=$_.PasswordLastSet
$maxPasswordAgeTimeSpan = $null
$maxPasswordAgeTimeSpan = (Get-ADDefaultDomainPasswordPolicy).MaxPasswordAge

$today=get-date
$ExpiryDate=$passwordSetDate + $maxPasswordAgeTimeSpan

$daysleft=$ExpiryDate-$today

$display=$daysleft.days
$UserName=$user.GivenName
$SurName=$user.Surname

if ($display -lt 25 -and $display -gt 0) {
$MyVariable = @”
Sehr geehrte/r $UserName $Surname,

Ihr Kennwort wird in $display Tagen ablaufen. Bitte aendern Sie Ihr Kennwort zeitnah.

Diese Nachricht wurde automatisch generiert. Bitte antworten Sie nicht darauf.

“@
send-mailmessage -to $user.mail -from Support@23gmbh.de -Subject “IT Information: Ihr Kennwort wird in $display Tagen ablaufen.” -body $MyVariable -smtpserver Server123
}
}

hth

Erik
Member: Teutone
Teutone Nov 14, 2018 at 09:27:16 (UTC)
Goto Top
Vielen Dank für eure zahlreichen Beiträge.

Durch Erik und DerWoWusste habe ich das Script nun wieder zum Leben erweckt.

Ich habe noch eine Kleinigkeit entdeckt. Umlaute mag das Script nicht. Diese werden in dem Fließtext der Informationsmail als "?" dargestellt.

Gibt es da auch was von Ratiopharm? ^^

Vielen Dank.

Grüße Teutone
Mitglied: 137808
137808 Nov 14, 2018 updated at 09:32:54 (UTC)
Goto Top
Set the -Encoding Parameter for Send-Mailmessage to UTF8.
Member: Teutone
Teutone Nov 22, 2018 at 10:16:38 (UTC)
Goto Top
Hi,

thanks for your post. With the parameter

$PSDefaultParameterValues['*:Encoding'] = 'utf8'


i completed the script and it runs perfect.

Thanks to all for your support face-smile.

Greetings Teutone