newit1
Goto Top

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.

# 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!

Content-Key: 594205

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

Printed on: April 25, 2024 at 00:04 o'clock

Mitglied: 145033
145033 Aug 06, 2020 updated at 19:01:50 (UTC)
Goto Top
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.
und wie ändere ich das?
Na nach dem ersten $filename zusätzlich die HTML weg schreiben, nicht nur am Ende.
Member: erikro
Solution erikro Aug 09, 2020 updated at 20:47:51 (UTC)
Goto Top
Moin,

Zitat von @newit1:

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. face-wink

# 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. face-wink Was Du ja willst, ist eine Textdatei, die irgendwie so aussieht:

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
Mitglied: 145033
Solution 145033 Aug 10, 2020 updated at 06:02:52 (UTC)
Goto Top
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
https://tio.run/##K8gvTy0qzkjNyfn/X6UssUjBVkHJKSfRKac0SYlLCSSiV1JRovT/Pw ...