My First PowerShell Script
Ok, PowerShell gibt es schon eine ganze Weile, aber bisher konnten die guten alten cmd-Scripts noch alles erledigen, was anstand. Nun musste ich ein Script von Grund auf neu schreiben, hier bot sich PowerShell natürlich an.
Es ging um die Erstellung von Signaturen für Microsoft Outlook. Bisher haben wir die drei Dateien (txt, rtf und htm) jeweils manuell im Notepad bearbeitet. Wir mussten jeweils Vornamen, Nachnamen, Titel und Anrede anpassen. Die Emailadresse durfte natürlich auch nicht fehlen.
Ich habe zuerst die drei Files mit
eindeutigen Platzhaltern versehen, welche ich anschliessend im Script ersetzen kann. Das txt-File sieht zum Beispiel so aus:
Mit freundlichen Grüssen
a_title a_forename a_surename
a_job
IN4OUT it solutions ag
CH – 5000 Aarau
Phone +41 62 834 50 70
Fax +41 62 834 50 70
mailto:a_forenaml.a_surenaml@in4out.ch
Das ganze lässt sich mit PowerShell sehr einfach lösen:
Zuerst definiere ich die Argumente:
#define Arguments
$a_title = $args[0]
$a_forename = $args[1]
…
Anschliessend folgt die Abfrage der Daten:
#Popup to enter information
Write-Host
$a_title = Read-Host "Anrede (z.B. "Hr.")"
$a_forename = Read-Host "Vorname"
…
Für die Mailadresse benötige ich den Nachnamen und den Vornamen in Kleinschrift. Für den schlussendlichen Dateienamen möchte ich Grossbuchstaben.
Dies lässt sich so erledigen:
#convert to lower-/uppercase
$a_forenaml = $a_forename.ToLower()
$a_surenaml = $a_surename.ToLower()
$a_usernamu = $a_username.ToUpper()
Für die Mailadressen dürfen natürlich keine Umlaute verwendet werden. Diese müssen ebenfalls ersetzt werden:
#replace Umlaute
$a_forenaml = $a_forenaml -replace 'ä' ,"ae"
…
Danach geht's ans editieren der Files. Der Code hierfür ist für alle Files derselbe, mit angepassten Dateinamen.
Get-Content textfile.txt |
ForEach-Object { $_ -replace "a_title", "$a_title" } |
ForEach-Object { $_ -replace "a_forename", "$a_forename" } |
…
Set-Content "$a_usernamu".txt
Das ganze wird als ps1-File gespeichert, und kann auch auf jedem Server, auf welchem PowerShell installiert ist, ausgeführt werden.
Ich habe absichtlich nicht das gesamte Script veröffentlicht, bei Interesse reicht ein Kommentar.