今回は、絶対、正確無比に入力したコマンドラインが失敗してしまうというトラブルの話。原因さえ分かってしまえば簡単なことなのですが……。
最近のWindows Serverは、CUI(Character User Interface)環境で実行しなければならない操作が多くなりました。次期Windows Server 2016は「Server Core」インストールに加えて、「Nano Server」や「Windows Containers」が登場し、CUIで操作しなければならない場面が増えそうですよ。
それでは、下の画面1を見てください。これは「Windowsリモート管理(WinRM)」と「Windowsシェル(WinRS)」を使用して、リモートのWindows Serverのブート構成ストアを編集しているところの画面です。
次に画面2を見てください。同じようなコマンドラインを実行しようとしていますが、なぜかエラーになってしまいます。
実は、画面2は筆者がよくやってしまう操作ミスの例です。画面のプロンプトをよく見てください。画面1の「C:\>」は、Windows標準の「コマンドプロンプト(cmd.exe)」のプロンプトです。画面2の「PS C:\>」は、「Windows PowerShell」のプロンプトです。コマンドプロンプトで実行する操作をWindows PowerShellの環境で実行したために、コマンドラインがエラーになってしまったのです。
Windows PowerShellの既定の青い背景なら間違いは少ないでしょうが、CUI環境に慣れてくるとコマンドプロンプトで「powershell.exe」と入力し、素早くWindows PowerShellに切り替えて操作することがあります。その場合、ウィンドウの背景はコマンドプロンプトの黒のままですので、区別がつきにくくなります。
Windows PowerShellにおいても、コマンドプロンプトで実行するコマンドや「Windows Script Host(WSH)」のスクリプト、あるいはアプリケーションをコマンドプロンプトと同じように実行することは可能です。
しかし、Windows PowerShellにおいて「{}」は、「Invoke-Command」のスクリプトブロックを記述したり、パイプライン(|)の後のフィルターに使用したり、条件分岐のスクリプトブロックに使用したり、変数に連想配列を格納するのに使用したりと、さまざまな場面で使用します(画面3)。
先ほどの画面2の失敗例では、コマンドプロンプトで実行するコマンドラインに「{}」が含まれていました。そのため、Windows PowerShell上ではWindows PowerShellのルールで処理しようとしたため、コマンドの引数としては正しく処理できずに失敗したのです。
この種のトラブルは、コマンドプロンプトで操作すべきか、Windows PowerShellで操作すべきかを、きちんと使い分けて作業していれば避けられることです。いま自分がどちらの環境で作業をしているのかを把握していれば間違うことはないのでしょうが、うっかり忘れてしまうというのが人というものです。自分は完全に正しいコマンドラインを実行していると信じているのに、それが失敗すると理由が分からずに遠回りしてしまうことになります。
Copyright © ITmedia, Inc. All Rights Reserved.