Seltsame Zeichen bei „net“

Bei der Benutzung einiger Kommandos in der Eingabeaufforderung oder auch in der PowerShell werden bei Datumsangaben komische Striche angezeigt. Woran liegt das?

Lesezeit: 1 Min.
In Pocket speichern
vorlesen Druckansicht Kommentare lesen
Von
  • Hajo Schulz

Bei der Benutzung der Kommandos net user und net time in der Eingabeaufforderung oder auch in der PowerShell werden bei Datumsangaben komische Striche angezeigt. Das Problem tritt seit Windows 10 1903 auf und ist auch in 1909 und 2004 vorhanden. In früheren Versionen, zum Beispiel 1809, ist die Anzeige noch korrekt. Haben Sie dazu eine Idee, um das Problem zu beheben?

Ganz offenbar sind Sie über einen Bug gestolpert, den Microsoft in neueren Windows-Versionen in das Programm net.exe eingebaut hat. Bei dem Zeichen handelt es sich um das „Links-nach-rechts-Formatierungszeichen (LRM)“ U+200E.

In die Ausgabe von Datums- und Uhrzeitangaben des Programms „net“ hat Microsoft einen seltsamen Bug eingebaut.

Sobald Sie die Ausgabe per > oder | umleiten, macht Windows daraus ein Fragezeichen. Wenn Sie die Ausgabe per Skript weiterverarbeiten wollen, können Sie das ausnutzen und die überflüssigen Zeichen zum Beispiel in der PowerShell folgendermaßen aus der Ausgabe herausfiltern:

(net user $username) -replace '\?',''

Das Fragezeichen ist dabei mit einem \ zu „escapen“, weil -replace mit regulären Ausdrücken arbeitet und ein ? dort eine besondere Bedeutung hat.

In einer Batch-Datei wird es leider etwas komplizierter:

@echo off
setlocal enabledelayedexpansion
for /f "delims=§" %%l in ('net user %username%') do (
set line=%%l
echo !line:?=!
)

Zeichenkettenersetzung funktioniert hier im Prinzip nach dem Muster %variable:suchmuster=ersatztext%. Weil das aber mit der Laufvariablen einer for-Schleife nicht funktioniert, muss man den Umweg über eine zweite Variable nehmen (%line%) und dazu die „verzögerte Erweiterung“ zunächst mit setlocal enabledelayedexpansion einschalten und dann auch benutzen, indem man die Variable in ! statt in % einschließt.

(hos)