PowerShell で CMD コマンドを実行する
多くの従来のコマンドプロンプト(CMD)コマンドは、Windows PowerShell スクリプト環境で機能します。PowerShell 環境では、これらのコマンドが、ping
などの最もよく使用されるコマンドから、エイリアスを使用する従来の環境からの tracert
などの最も情報量の多いコマンドに転送されます。
ただし、コマンドプロンプトターミナルで実行中のコマンドの一部は、Windows PowerShell のスクリプト環境では機能しません。この記事では、それらを Windows PowerShell に正しく変換する方法について説明します。
PowerShell 呼び出し演算子&
の使用
レガシーCMD は、特定のパスにある実行可能ファイル形式(.exe)でコマンドラインプログラムを実行し、その後に実際のコマンドを実行すると、正常に機能します。
以下の構文例を使用すると、CMD 内でスクリプトを実行すると、アバストコマンドラインスキャナーを使用してクイックスキャンを実行でき、正常に機能します。
サンプルコード:
"C:\Program Files\AVAST Software\Avast\ashCmd.exe" /Quick
ただし、同じ構文を使用して Windows PowerShell で実行すると、例外エラーが発生します。エラーの背後にある理由は、Windows PowerShell が二重引用符""
をリテラル文字列値と見なし、構文に付随する/Quick
パラメーターがどのネイティブライブラリでも使用できないためです。
さらに、Windows PowerShell で引用符で囲まれたパスのみを実行すると、実行可能ファイル自体を実行するのではなく、文字列値のみが出力されます。
サンプルコード:
"C:\Program Files\AVAST Software\Avast\ashCmd.exe"
出力:
C:\Program Files\AVAST Software\Avast\ashCmd.exe
この問題を解決するには、コマンドラインの先頭で呼び出し演算子またはアンパサンド記号&
を呼び出して、Windows PowerShell で実行可能パスを適切に実行します。
& "C:\Program Files\AVAST Software\Avast\ashCmd.exe" /Quick
PowerShell 環境で呼び出し演算子を使用すると、文字列パスが実行可能ファイルへの実際のパスとして扱われます。したがって、付随するコマンドパラメータを使用してスクリプトを直接実行します。
cmd.exe
を使用した CMD コマンドの実行
CMD コマンドを実行する別の例は、cmd.exe
を使用することです。以前の方法と同様に、Windows PowerShell 内に cmd.exe
を追加できます。
追加して実行すると、Windows PowerShell コマンドプロンプト内のコマンドラインインターフェイスが呼び出されます。
cmd.exe /c where python
パラメータ/c
は、入力されたコマンドを実行し、cmd.exe
コマンドラインインタプリタを終了します。
以下の構文を実行して、他のパラメーターの詳細について、cmd.exe
コマンドのヘルプドキュメントを表示できます。さらに、PowerShell と CMD の両方のコマンドラインインターフェイスで以下のコマンドを実行できます。
cmd.exe /?
PowerShell による CMD
へのパイピング
Windows PowerShell では、cmd
コマンドレットを送信するコマンドにパイプすることで、コマンドプロンプトターミナルにコマンドを送信することもできます。
以下の構文例では、ローカルコンピューターの IP 構成を照会する要求が CMD コマンドラインインターフェイスに送信されます。コードを実行した後、CMD ターミナルは終了し、ユーザーは行の先頭にある PS
で示される PowerShell ターミナルに戻ります。
サンプルコード:
"Ipconfig /all" | cmd
Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn