Udostępnij za pośrednictwem


PowerShell で全角文字を入力すると表示がおかしくなる問題について

みなさん、こんにちは。Windows サポートの神田です。

今回は、Windows Powershell の入力において発生する表示の問題について記載します。
なお、本事象は Windows 10、Windows Server 2016 以降のオペレーティング システムで発生します。
また、問題は表示上のみであり、スクリプトの実行には影響はありません。

- Powershell モジュール PSReadLine について
Windows Powershell には、コンソールに入力した内容に応じて、自動的に色分けを行うモジュール PSReadLine が提供されています。このモジュールが有効な場合、入力内容に応じて画面上の文字に自動で色付けが行われます。
例えばコマンドは黄色、変数は緑色、コマンド オプションは灰色、といった感じで色付けが行われます。

このモジュールは上記のようにスクリプトを入力する際には非常に便利なのですが、入力文字に日本語など 2 バイト文字と呼ばれる文字が含まれる場合 - 例えばファイル名やアイテム名など - に、コンソール画面上で編集を行うと画面の表示に問題が生じる場合があります。

問題の事象は、文字をダブルクォーテーション ( ” ) でくくっていて、その文字を操作した場合に発生します。

例えば、以下のようにファイル名に日本語を含んだパスを指定してプログラムを起動する場合ですが、ファイルまでのパスを Powershell のコンソールに一度 $path に代入するためにペーストしたとします。$path を指定して、プログラムはそのファイルを正常に開くことができます。

上記のパスですが、途中に空白などは開いていないので、ダブルクォーテーション ( ” ) を外そうとすると、パスの末尾と先頭のダブルクォーテーションを削除した段階で、表示がおかしくなってしまいます。なお、内部的には正しくダブルクォーテーションが除かれたパスが格納されるので、$path を指定してファイルを開く事は可能です。

上記のように、表示上の問題となりますが、編集しているうちに正しいパスが画面上で確認できなくなってしまうため、コンソール上での編集が正しく行えない状況となってしまいます。
これは、先に記述した Powershell モジュール PSReadLine の想定しない動作により発生する問題です。

本事象は、Windows の Powershell の問題として認識しており、次期バージョンにて問題が修正されるよう障害情報には登録をしております。
なお恐れ入りますが現行製品では現時点で修正は予定されておりません。その場合は、モジュール PSReadLine をアンインストールすることで表示が不正となる問題は発生しなくなります。

// PSReadLine のアンインストール コマンド
Remove-Module PSReadline

※ ご注意
上記コマンドにて PSReadLine をアンインストールすると、文字の表示を色付けする機能が無効になるため、入力中の色分けが行われなくなります。
ご利用いただいている環境や運用状況に応じて、パスやファイル名、アイテム名を 1 バイト文字に統一するか、PSReadLine をアンインストールして色分け機能を無効にした状態で使用するか、いずれかをご検討いただきますようお願いいたします。

- 参考資料
PSReadLine
/en-us/powershell/module/psreadline/?view=powershell-6

Use PSReadLine for More Efficient PowerShell Console
https://blogs.technet.microsoft.com/heyscriptingguy/2015/04/28/use-psreadline-for-more-efficient-powershell-console/