Powershell で wsl.exe の出力をそのまま操作しようとするとうまく動かない。
PS C:\Windows\System32> wsl.exe --list --running | Select-String "U" Windows Subsystem for Linux Distributions: Ubuntu (Default) PS C:\Windows\System32> wsl.exe --list --running | Select-String "Ubuntu" (何も出ない)
これは wsl.exe の出力 (unicode) と Powershell の想定する文字コード (UTF-8) が合わないのが原因。
wsl.exe の出力は一見すると普通の文字列に見えるが、 Format-Hex すると ASCII でも後ろに 0x00 が入っていることがわかる。
PS C:\Windows\System32> wsl.exe --list --running | Format-Hex ... Offset Bytes Ascii 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F ------ ----------------------------------------------- ----- 0000000000000000 00 55 00 62 00 75 00 6E 00 74 00 75 00 20 00 28 U b u n t u ( 0000000000000010 00 44 00 65 00 66 00 61 00 75 00 6C 00 74 00 29 D e f a u l t ) 0000000000000020 00
この対策としては、 WSL_UTF8 環境変数を設定して wsl.exe の出力を UTF-8 にすれば良い。
PS C:\Windows\System32> $env:WSL_UTF8=1 PS C:\Windows\System32> wsl.exe --list --running | Select-String "Ubuntu" Ubuntu (Default)