PowerShell: Umlaute ersetzen
10. Juli 2013 von Christian Imhorst
Es gibt einen kleinen Haken, wenn man mit Hilfe einer Hashtable Umlaute in der PowerShell ersetzen möchte — Hashtables sind standardmäßig case insensitive. Das heißt, die Groß- oder Kleinschreibung wird nicht beachtet und Buchstaben wie Ä und ä werden als derselbe Wert behandelt. Oder wie es die PowerShell sagt:
Doppelte Schlüssel "Ä" sind in Hashliteralen nicht zulässig.
Eine Lösung, wie sie bei Powergui.org vorgestellt wird, hilft also nicht weiter. Dazu benötigt man ein neues Hashtable-Objekt, das die nötige case sensitivity mitbringt:
function Replace-Umlaute ([string]$s) { $UmlautObject = New-Object PSObject | Add-Member -MemberType NoteProperty -Name Name -Value $s -PassThru # hash tables are by default case insensitive # we have to create a new hash table object for case sensitivity $characterMap = New-Object system.collections.hashtable $characterMap.ä = "ae" $characterMap.ö = "oe" $characterMap.ü = "ue" $characterMap.ß = "ss" $characterMap.Ä = "Ae" $characterMap.Ü = "Ue" $characterMap.Ö = "Oe" foreach ($property in 'Name') { foreach ($key in $characterMap.Keys) { $UmlautObject.$property = $UmlautObject.$property -creplace $key,$characterMap[$key] } } $UmlautObject } # Replace-Umlaute $res = Replace-Umlaute "Übermaß" $res.Name |
Geschrieben in Powershell, Windows