Powershell Skript - nur ein Befehl wird ausgeführt
Hallo zusammen,
habe ein Skript gebastelt, um im Unternehmen einheitlich die Mail Signatur abzubilden.
Entsprechende Daten kommen aus dem AD.
Die letzten Zeilen sorgen dafür, dass eine Datei im HTML & TXT Format gespeichert werden. Auf diese Dateien greift Outlook letztendlich zu.
Das TXT Fomat brauche ich, da nicht alle Kunden E-Mails auf die beantwortet werden, automatisch im HTML Format sind.
Allerdings stellte ich fest, dass beim Ausführen nur eine Datei gespeichert wird.
Nämlich immer der letzte Befehl.
Sprich aktuell wird nur TXT gespeichert, HTML nicht.
Tausche ich die Befehle, wird HTML gespeichert, TXT nicht.
Woran liegt dies, und wie ändere ich das?
Besten Dank im Vorraus!
habe ein Skript gebastelt, um im Unternehmen einheitlich die Mail Signatur abzubilden.
Entsprechende Daten kommen aus dem AD.
# Gets the path to the user appdata folder
$AppData = (Get-Item env:appdata).value
# This is the default signature folder for Outlook
$localSignatureFolder = $AppData+'\Microsoft\Signatures'
# This is a shared folder on your network where the signature template should be
$templateFilePath = "\\meindc\GPO\Outlook-Signatur"
# Get the current logged in username
$userName = $env:username
# The following 5 lines will query AD and get an ADUser object with all information
$filter = "(&(objectCategory=User)(samAccountName=$userName))"
$searcher = New-Object System.DirectoryServices.DirectorySearcher
$searcher.Filter = $filter
$ADUserPath = $searcher.FindOne()
$ADUser = $ADUserPath.GetDirectoryEntry()
# Now extract information for the signature
$vorname = $ADUser.givenname
$nachname = $ADUser.sn
$email = $ADUser.mail
$telefon = $ADUser.telephonenumber
$abteilung = $ADUser.title
$fax = $ADUser.facsimileTelephoneNumber
$handy = $ADUser.mobile
$vornamePlaceHolder = "GIVENNAME"
$nachnamePlaceHolder = "SN"
$emailPlaceHolder = "EMAIL"
$telefonPlaceHolder = "TELEPHONENUMBER"
$abteilungPlaceHolder = "TITLE"
$faxPlaceHolder = "FAXNUMBER"
$handyPlaceHolder = "MOBILENUMBER"
$rawTemplate = get-content $templateFilePath"\MailSignatur.htm"
$rawTemplate = get-content $templateFilePath"\MailSignatur.txt"
$signature = $rawTemplate -replace $vornamePlaceHolder,$vorname
$rawTemplate = $signature
$signature = $rawTemplate -replace $nachnamePlaceHolder,$nachname
$rawTemplate = $signature
$signature = $rawTemplate -replace $emailPlaceHolder,$email
$rawTemplate = $signature
$signature = $rawTemplate -replace $telefonPlaceHolder,$telefon
$rawTemplate = $signature
$signature = $rawTemplate -replace $abteilungPlaceHolder,$abteilung
$rawTemplate = $signature
$signature = $rawTemplate -replace $faxPlaceHolder,$fax
$rawTemplate = $signature
$signature = $rawTemplate -replace $handyPlaceHolder,$handy
$rawTemplate = $signature
# Save it
$fileName = $localSignatureFolder + "\" + "MailSignatur" + ".htm"
$fileName = $localSignatureFolder + "\" + "MailSignatur" + ".txt"
$signature > $fileName
Die letzten Zeilen sorgen dafür, dass eine Datei im HTML & TXT Format gespeichert werden. Auf diese Dateien greift Outlook letztendlich zu.
Das TXT Fomat brauche ich, da nicht alle Kunden E-Mails auf die beantwortet werden, automatisch im HTML Format sind.
Allerdings stellte ich fest, dass beim Ausführen nur eine Datei gespeichert wird.
Nämlich immer der letzte Befehl.
Sprich aktuell wird nur TXT gespeichert, HTML nicht.
Tausche ich die Befehle, wird HTML gespeichert, TXT nicht.
Woran liegt dies, und wie ändere ich das?
Besten Dank im Vorraus!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 594205
Url: https://administrator.de/forum/powershell-skript-nur-ein-befehl-wird-ausgefuehrt-594205.html
Ausgedruckt am: 21.04.2025 um 08:04 Uhr
3 Kommentare
Neuester Kommentar

Allerdings stellte ich fest, dass beim Ausführen nur eine Datei gespeichert wird.
$fileName = $localSignatureFolder + "\" + "MailSignatur" + ".htm"
$fileName = $localSignatureFolder + "\" + "MailSignatur" + ".txt"
$signature > $fileName
Naja, was erwartest du wenn du die Variable $fileName des ersten Pfads mit dem des zweiten überschreibst und somit am Ende mit einem einzigen Befehl nur die eine Textdatei erstellst?? Da hat aber einer kräftig einen in der Krone ... Kaffee rüber schieb.$fileName = $localSignatureFolder + "\" + "MailSignatur" + ".txt"
$signature > $fileName
und wie ändere ich das?
Na nach dem ersten $filename zusätzlich die HTML weg schreiben, nicht nur am Ende.
Moin,
Nein, wie mein Vorredner schon bemerkte, tun sie das nicht.
Das macht jetzt das, was Du willst. Den Backtick brauchst Du, um dem Punkt die besondere Bedeutung zu nehmen, dass danach eine Objekteigeschaft kommt.
Aber Du willst ja eigentlich was ganz anderes. Wenn Du das so machst, dann kriegen die armen Gegenüber, die kein HTML können oder wollen, die ganzen HTML-Tags um die Ohren. Das ist dann nicht wirklich gut zu lesen.
Was Du ja willst, ist eine Textdatei, die irgendwie so aussieht:
Die würde ich einfach bei Anlegen des HTML-Objekts zeilenweise direkt in die TXT-Datei schreiben. Wozu da der Umweg über ein Objekt? Also so in etwa:
hth
Erik
Die letzten Zeilen sorgen dafür, dass eine Datei im HTML & TXT Format gespeichert werden. Auf diese Dateien greift Outlook letztendlich zu.
Nein, wie mein Vorredner schon bemerkte, tun sie das nicht.
# Save it
$fileName = $localSignatureFolder + "\" + "MailSignatur"
$signature > "$fileName`.html"
$signature > "$fileName`.txt"
>
Das macht jetzt das, was Du willst. Den Backtick brauchst Du, um dem Punkt die besondere Bedeutung zu nehmen, dass danach eine Objekteigeschaft kommt.
Das TXT Fomat brauche ich, da nicht alle Kunden E-Mails auf die beantwortet werden, automatisch im HTML Format sind.
Aber Du willst ja eigentlich was ganz anderes. Wenn Du das so machst, dann kriegen die armen Gegenüber, die kein HTML können oder wollen, die ganzen HTML-Tags um die Ohren. Das ist dann nicht wirklich gut zu lesen.
Hans Meier
h.meier@acme.com
Telefon: 555 -123 45 67
...
Die würde ich einfach bei Anlegen des HTML-Objekts zeilenweise direkt in die TXT-Datei schreiben. Wozu da der Umweg über ein Objekt? Also so in etwa:
$fileName = $localSignatureFolder + "\" + "MailSignatur.txt"
$rawTemplate = get-content $templateFilePath"\MailSignatur.htm"
# $rawTemplate = get-content $templateFilePath"\MailSignatur.txt"
# Hier machst Du übrigens den gleichen Fehler wie zuvor. Du überschreibst Die Variable.
# Ich habe mich geirrt. Es bekommen die User keine HTML-Version.
# Jetzt löschen wir vorsichtshalber eine eventuell bestehende Datei.
remove-item $fileName -force -erroraction continue
$signature = $rawTemplate -replace $vornamePlaceHolder,$vorname
$rawTemplate = $signature
out-file -filepath $fileName -inputobject $vorname -append -encoding UTF8
hth
Erik

Zitat von @erikro:
$signature > "$fileName`.html"
$signature > "$fileName`.txt"
Den Backtick brauchst Du, um dem Punkt die besondere Bedeutung zu nehmen, dass danach eine Objekteigeschaft kommt.
Der Backtick ist nicht nötig, da der Punkt nicht zu den gültigen Variablenzeichen gehört und somit als String Interpretiert wird$signature > "$fileName`.html"
$signature > "$fileName`.txt"
Den Backtick brauchst Du, um dem Punkt die besondere Bedeutung zu nehmen, dass danach eine Objekteigeschaft kommt.
https://tio.run/##K8gvTy0qzkjNyfn/X6UssUjBVkHJKSfRKac0SYlLCSSiV1JRovT/Pw ...