Jump to content

Variablen werden nicht angezeigt


Go to solution Solved by Yoda,
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Recommended Posts

Hallo zusammen,

 

ich hänge an einem PowerShell Problem.

 

Ich lese einen Datei mit folgendem Befehl ein

$body_de = get-content $lang_de | where-object {$_.readcount -gt 3} | Out-String

Der Inhalt der Datei sieht wie folgt aus

Tage
heute
Ihr Windows Passwort läuft $messageDays ab!
Hallo $GivenName $Surname,
    <p> Ihr Windows Passwort läuft $messageDays ab.<br>
    <p><b>Sie können dies wie folgt ändern:</b><br>
    <ul>
        <li> STRG+ALT+DEL drücken </li>
        <li> Option 'Kennwort ändern...' auswählen </li>
        <li> Entsprechenden Felder ausfüllen und bestätigen </li>
    </ul>
    <b> Kennwortvoraussetzungen</b>
    <ul>
        <li> Sie dürfen weder wesentliche Teile des Benutzernamens noch den vollständigen Benutzernamen verwenden. </li>
        <li> Mind. 9 Zeichen </li>
        <li> Zeichen aus drei der vier folgenden Kategorien müssen enthalten sein:<ul>
            <li>Großbuchstaben</li>
            <li>Kleinbuchstaben</li>
            <li>Ziffern (0 bis 9)</li>
            <li>Sonderzeichen (z.B. !, $, #, %)</li></ul>
    </ul>
    <p>Vielen Dank <br>
    - EDV -
    </P>

Der HTML Code wird entsprechend umgewandelt. Allerdings bleiben die Variablen ungefüllt und 1:1 in den Text übernommen.

 

Was kann ich tun, damit diese mit den entsprechenden Werten ausgegeben werden?

 

Danke und Gruß

Yoda

Link to post

Vielleicht möchtest Du noch mehr vom Skript posten?

Ich glaube aber nicht, das Content aus einer Datei so einfach mit Inhalten aus Variablen ersetzt werden können.

 

Erzeuge die Ausgabe doch einfach direkt im Powershell:

 

$x= "Ihr Windows Passwort läuft " + $messageDays + " ab!"

 

usw.

Link to post

Guten Morgen,

 

hier mal das ganze Script.

Als Grundlage dient folgendes Script:

 

http://gallery.technet.microsoft.com/Password-Expiry-Email-177c3e27/view/Discussions#content #

 

Das ganze soll so aufgebort werden, dass es Mails in verschiedenen Sprachen verschickt.

Um das Script etwas schlank zu halten, dachte ich mir, die Sprachen in extra Files aus zu lagern.

#################################################################################################################
# 
# Version 1.1 May 2014
# Robert Pearman (WSSMB MVP)
# TitleRequired.com
# Script to Automated Email Reminders when Users Passwords due to Expire.
#
# Requires: Windows PowerShell Module for Active Directory
#
# For assistance and ideas, visit the TechNet Gallery Q&A Page. http://gallery.technet.microsoft.com/Password-Expiry-Email-177c3e27/view/Discussions#content
#
##################################################################################################################
# Please Configure the following variables....
$smtpServer="127.0.0.1"
$expireindays = 20
$from = "Password Reminder <password-rimnder@xxx.de>"
$logging = "Enabled" # Set to Disabled to Disable Logging
$logFile = "c:\tmp\pwd.csv" # ie. c:\mylog.csv
$testing = "Enabled" # Set to Disabled to Email Users
$bccRecipient = "sdafsdaf@asfasd.de"
$testRecipient = "adfasdf@asdfasdf.de"
$date = Get-Date -format ddMMyyyy
#
###################################################################################################################

# Sprachen
$lang_de = "c:\tmp\lang_de.txt"
$lang_fr = "c:\tmp\lang_fr.txt"
$lang_pl = "c:\tmp\lang_pl.txt"
$lang_gb = "c:\tmp\lang_gb.txt"

# Check Logging Settings
if (($logging) -eq "Enabled")
{
    # Test Log File Path
    $logfilePath = (Test-Path $logFile)
    if (($logFilePath) -ne "True")
    {
        # Create CSV File and Headers
        New-Item $logfile -ItemType File
        Add-Content $logfile "Date,Surname,GivenName,EmailAddress,DaystoExpire,ExpiresOn"
    }
} # End Logging Check

# Get Users From AD who are Enabled, Passwords Expire and are Not Currently Expired
Import-Module ActiveDirectory
$users = get-aduser -filter * -properties GivenName, Surname, PasswordNeverExpires, PasswordExpired, PasswordLastSet, EmailAddress, co |where {$_.Enabled -eq "True"} | where { $_.PasswordNeverExpires -eq $false } | where { $_.passwordexpired -eq $false }
$DefaultmaxPasswordAge = (Get-ADDefaultDomainPasswordPolicy).MaxPasswordAge

# Process Each User for Password Expiry
foreach ($user in $users)
{
    $Name = $user.Name
    $Surname= $user.Surname
    $GivenName= $user.GivenName
    $emailaddress = $user.emailaddress
    $passwordSetDate = $user.PasswordLastSet
    $country = $user.co
    $PasswordPol = (Get-AduserResultantPasswordPolicy $user)
    # Check for Fine Grained Password
    if (($PasswordPol) -ne $null)
    {
        $maxPasswordAge = ($PasswordPol).MaxPasswordAge
    }
	else
    {
        # No FGP set to Domain Default
        $maxPasswordAge = $DefaultmaxPasswordAge
    }
  
    $expireson = $passwordsetdate + $maxPasswordAge
    $today = (get-date)
    $daystoexpire = (New-TimeSpan -Start $today -End $Expireson).Days
        
    # Set Greeting based on Number of Days to Expiry.

    # Check Number of Days to Expiry
    $messageDays = $daystoexpire

    if (($messageDays) -ge "1")
    {
        $messageDays = "in " + "$daystoexpire" + " Tagen"
    }
    else
    {
        $messageDays = "heute"
    }
    
	switch ($country) {
		"Vereinigtes Königreich" {
			$subject = get-content $lang_gb | where-object {$_.readcount -eq 3}
			$body_gb = get-content $lang_gb | where-object {$_.readcount -gt 3} | Out-string
			}	
		"Polen" {
			$subject = get-content $lang_pl | where-object {$_.readcount -eq 3}
			$body_pl = get-content $lang_pl | where-object {$_.readcount -gt 3} | Out-string
			}
		"Frankreich"{
			$subject = get-content $lang_fr | where-object {$_.readcount -eq 3}
			$body_fr = get-content $lang_fr | where-object {$_.readcount -gt 3} | Out-string
			}
		default {
			$subject = get-content $lang_de | where-object {$_.readcount -eq 3}
			$body_de = get-content $lang_de | where-object {$_.readcount -gt 3} | Out-String
			$body = $body_de
			}
	}
	
    # If Testing Is Enabled - Email Administrator
    if (($testing) -eq "Enabled")
    {
        $emailaddress = $testRecipient
    } # End Testing

    # If a user has no email address listed
    if (($emailaddress) -eq $null)
    {
        $emailaddress = $testRecipient    
    }# End No Valid Email

    # Send Email Message
    if (($daystoexpire -ge "0") -and ($daystoexpire -lt $expireindays))
    {
         # If Logging is Enabled Log Details
        if (($logging) -eq "Enabled")
        {
            Add-Content $logfile "$date,$Surname,$GivenName,$emailaddress,$daystoExpire,$expireson" 
        }
        
        # Send Email Message
        Send-Mailmessage -smtpServer $smtpServer -encoding ([System.Text.Encoding]::UTF8)  -from $from -to $emailaddress -subject $subject -body $body -bcc $bccRecipient -bodyasHTML -priority High  
		

    } # End Send Message
    
} # End User Processing
# End
Link to post

Spontane Idee: Lagere die Sprachdefinitionen nicht in "Dateien" aus, sondern in PS1-Skripts, die Du dann einbindest. Und ggf. parametrisiert aufrufst. Returnwert kann entweder ein PSCustomObject sein (da kannst Du den kompletten Return in Properties unterbringen) oder was auch immer - PoSh hat tausend Wege zum Ziel :)

Link to post
  • Solution

Guten Morgen,

 

hab mich jetzt doch dazu entschieden die einzelnen Sprachen mit in das Script zu nehmen.

War die einfachste Methoden.

 

Anbei das fertige Script, falls es jemand mal benötigt.

#################################################################################################################
#
# Version 1.1 May 2014
# Robert Pearman (WSSMB MVP)
# TitleRequired.com
# Script to Automated Email Reminders when Users Passwords due to Expire.
#
# Requires: Windows PowerShell Module for Active Directory
#
# For assistance and ideas, visit the TechNet Gallery Q&A Page. http://gallery.technet.microsoft.com/Password-Expiry-Email-177c3e27/view/Discussions#content
#
##################################################################################################################
# Please Configure the following variables....
$smtpServer="127.0.0.1"
$expireindays = 8
$from = "Password Reminder <password@xyz.de>"
$logging = "Enabled" # Set to Disabled to Disable Logging
$logFile = "C:\PasswordReminder\pwd.csv" # ie. c:\mylog.csv
$testing = "Disabled" # Set to Disabled to Email Users
$bccRecipient = "abc@yxz.de"
$testRecipient = "abc@yxz.de"
$date = Get-Date -format ddMMyyyy
#
###################################################################################################################

# Check Logging Settings
if (($logging) -eq "Enabled")
{
    # Test Log File Path
    $logfilePath = (Test-Path $logFile)
    if (($logFilePath) -ne "True")
    {
        # Create CSV File and Headers
        New-Item $logfile -ItemType File
        Add-Content $logfile "Date,Surname,GivenName,EmailAddress,DaystoExpire,ExpiresOn"
    }
} # End Logging Check

# Get Users From AD who are Enabled, Passwords Expire and are Not Currently Expired
Import-Module ActiveDirectory
$users = get-aduser -filter * -properties GivenName, Surname, PasswordNeverExpires, PasswordExpired, PasswordLastSet, EmailAddress, co |where {$_.Enabled -eq "True"} | where { $_.PasswordNeverExpires -eq $false } | where { $_.passwordexpired -eq $false }
$DefaultmaxPasswordAge = (Get-ADDefaultDomainPasswordPolicy).MaxPasswordAge

# Process Each User for Password Expiry
foreach ($user in $users)
{
    $Name = $user.Name
    $Surname= $user.Surname
    $GivenName= $user.GivenName
    $emailaddress = $user.emailaddress
    $passwordSetDate = $user.PasswordLastSet
    $country = $user.co
    $PasswordPol = (Get-AduserResultantPasswordPolicy $user)
    # Check for Fine Grained Password
    if (($PasswordPol) -ne $null)
    {
        $maxPasswordAge = ($PasswordPol).MaxPasswordAge
    }
    else
    {
        # No FGP set to Domain Default
        $maxPasswordAge = $DefaultmaxPasswordAge
    }
 
    $expireson = $passwordsetdate + $maxPasswordAge
    $today = (get-date)
    $daystoexpire = (New-TimeSpan -Start $today -End $Expireson).Days
        
    # Set Greeting based on Number of Days to Expiry.

    # Check Number of Days to Expiry
    $messageDays = $daystoexpire
    if (($messageDays) -ge "1")
    {
        switch ($country) {
            "Vereinigtes Königreich" {
                $messageDays = "in " + "$daystoexpire" + " days"
                }
            "Polen" {
                $messageDays = "za " + "$daystoexpire" + " dni"
                }
            "Frankreich" {
                $messageDays = "dans " + "$daystoexpire" + " jours"
                }
            default {
                $messageDays = "in " + "$daystoexpire" + " Tagen"
                }
        }    
    }
    else
    {
        switch ($country) {
            "Vereinigtes Königreich" {
                $messageDays = "today"
                }
            "Polen" {
                $messageDays = "dzisiaj"
                }
            "Frankreich" {
                $messageDays = "aujourd'hui"
                }
            default {
                $messageDays = "heute"
                }
        }
    }
    switch ($country) {
        "Vereinigtes Königreich" {
            $subject = "Your Windows password expires $messageDays!"
            $body = "Hello $GivenName $Surname,
                        <p>Your Windows password expires $messageDays.<br>
                        <p><b>You can change this as follow:</b><br>
                        <ul>
                            <li>Press STRG+ALT+DEL</li>
                            <li>Select 'Change password...'</li>
                            <li>Fill and confirm the appropriate fields</li>
                        </ul>
                        <p><b>Password requirements</b><br>
                        <ul>
                            <li>You must not use essential parts of the user name nor the full user name</li>
                            <li>Mind. 9 characters</li>
                            <li>Characters from three of the following four categories must be included:<ul>
                            <li>Uppercase</li>
                            <li>Lowercase</li>
                            <li>Numbers (0 bis 9)</li>
                            <li>One of the following special characters: !, $, #, %, &, (, ), *, +, -, .</li></ul>
                        </ul>
                        <p>many thanks<br>
                        - EDV -
                        </P>"
                }    
        "Polen" {
            $subject = "Twoje hasło do systemu MS Windows wygaśnie $messageDays!"
            $body = "Witaj $GivenName $Surname,
                        <p>Twoje hasło do systemu MS Windows wygaśnie $messageDays.<br>
                        <p><b>Możesz je zmienić tak jak napisano poniżej (pracownicy biurowi pomijają punkt pierwszy):</b><br>
                        <ul>
                            <li>Włączyć VPN </li>
                            <li>nacisnąć razem przyciski Ctrl+ALT+DEL</li>
                            <li>wybrać opcje 'zmiana hasła…'</li>
                            <li>uzupełnić odpowiednie pola i nacisnąć 'Enter'</li>
                        </ul>
                        <p><b>Zasady polityki długości i złożoności hasła:</b><br>
                        <ul>
                            <li>nie można w haśle wykorzystywać ciągów znaków z loginu użytkownika oraz z imienia i nazwiska użytkownika.</li>
                            <li>Minimum 9 znaków</li>
                            <li>Znaki z minimum trzech z czterech kategorii musza być wykorzystywane:<ul>
                            <li>Wielkie litery</li>
                            <li>Małe litery</li>
                            <li>Cyrfy (od 0 do 9)</li>
                            <li>Jeden z następujących znaków specjalnych: !, $, #, %, &, (, ), *, +, -, .</li></ul>
                        </ul>
                        <p>Dziękujemy za współpracę<br>
                        - IT -
                        </P>"
                }
        "Frankreich"{
            $subject = "Votre mot de passe Windows expire $messageDays!"
            $body = "Bonjour $GivenName $Surname,
                        <p> Votre mot de passe Windows expire $messageDays.<br>
                        <p><b>Vous pouvez modifier cette comme suit:</b><br>
                        <ul>
                            <li>appuyez sur CTRL + ALT + SUPPR</li>
                            <li>option 'Change Password ...' Sélectionnez</li>
                            <li>Remplir et confirmer champs appropriés </li>
                        </ul>
                        <p><b> Mot de passe requis</b><br>
                        <ul>
                            <li>Vous ne devez pas utiliser des pièces essentielles du nom d'utilisateur ni le nom d'utilisateur complet. </li>
                            <li>esprit. 9 caractères </li>
                            <li>Les caractères de trois des quatre catégories suivantes doivent être incluses:<ul>
                            <li>majuscules</li>
                            <li>minuscules</li>
                            <li>numéros (0 à 9)</li>
                            <li>L'un des caractères spéciaux suivants: !, $, #, %, &, (, ), *, +, -, .</li></ul>
                        </ul>
                        <p>Merci Beaucoup<br>
                        - Informatique -
                        </P>"
            }
        default {
            $subject = "Ihr Windows Passwort läuft $messageDays ab!"
            $body = "Hallo $GivenName $Surname,
                        <p> Ihr Windows Passwort läuft $messageDays ab.<br>
                        <p><b>Sie können dies wie folgt ändern:</b><br>
                        <ul>
                            <li>STRG+ALT+ENTF drücken </li>
                            <li>Option 'Kennwort ändern...' auswählen </li>
                            <li>Entsprechenden Felder ausfüllen und bestätigen </li>
                        </ul>
                        <p><b> Kennwortvoraussetzungen</b><br>
                        <ul>
                            <li>Sie dürfen weder wesentliche Teile des Benutzernamens noch den vollständigen Benutzernamen verwenden. </li>
                            <li>Mind. 9 Zeichen </li>
                            <li>Zeichen aus drei der vier folgenden Kategorien müssen enthalten sein:<ul>
                            <li>Großbuchstaben</li>
                            <li>Kleinbuchstaben</li>
                            <li>Ziffern (0 bis 9)</li>
                            <li>Eines der folgenden Sonderzeichen: !, $, #, %, &, (, ), *, +, -, .</li></ul>
                        </ul>
                        <p>Vielen Dank <br>
                        - EDV -
                        </P>"
                }
    }
    
    # If Testing Is Enabled - Email Administrator
    if (($testing) -eq "Enabled")
    {
        $emailaddress = $testRecipient
    } # End Testing

    # If a user has no email address listed
    if (($emailaddress) -eq $null)
    {
        $emailaddress = $testRecipient    
    }# End No Valid Email

    # Send Email Message
    if (($daystoexpire -ge "0") -and ($daystoexpire -lt $expireindays))
    {
         # If Logging is Enabled Log Details
        if (($logging) -eq "Enabled")
        {
            Add-Content $logfile "$date,$Surname,$GivenName,$emailaddress,$daystoExpire,$expireson"
        }
        
        # Send Email Message
        Send-Mailmessage -smtpServer $smtpServer -encoding ([System.Text.Encoding]::UTF8)  -from $from -to $emailaddress -subject $subject -body $body -bcc $bccRecipient -bodyasHTML -priority High  
   
    } # End Send Message
  
} # End User Processing
 End

Im AD-Benutzerobjekt wird unter Adresse - Land/Region das Land eingestellt. Entsprechend wird die Password Erinnerung in der jeweiligen Sprache versendet.

Läuft bei uns 1x in der Nacht als geplanter Task.

 

Gruß

Yoda

 

Link to post
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...