Daten|teiler
Kopieren als Kulturtechnik

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