天地有情

PowerShell から外部プログラムを実行する

PowerShell から外部プログラムを実行する

■ PowerShellコマンドレット以外の外部プログラムを実行

コマンドレットとスクリプトだけであらゆる処理が実行できればいいのですが,
実運用では,従来のWindowsアプリやコマンドプロンプト(command,cmd)用の
プログラム(コマンド)と組み合わせて使う方が効率がよい場合があります.

また,長年にわたって蓄積されてきたコマンドプロンプト用の従来のコマンドにも
有用なものや便利なものも多く,それらを利用しない手はありません.

■ 実行(exe)形式のコマンド

Windows標準の外部コマンドをはじめとする exe 実行ファイルであれば,コマンドプロンプトと
同様に,PowerShellプロンプトで実行ファイル名をコマンドとして入力するだけです.

たとえば,Windowsの「電卓」の実体は calc.exe という実行ファイルです.
実行する時は拡張子exeを省略できますので,calc というコマンド名で実行できます.

PS> calc

なお,コマンド名がPowerShellのコマンドレット名と同名,あるいはコマンドレット名の
一部である場合は,PowerShellはコマンドレットを優先して起動しようとします.
このようなケースでexeプログラムを実行するには[パスを明確]に指定しなければなりません.

■ 外部コマンドを実行する時のフィルタ

PowerShellの優れた点は,PowerShellオブジェクトに全く対応していない従来型フィルタプログラム
であってもフィルタとして使用できることです.

ただし,これらのコマンドプロンプト用のフィルタプログラムでは,PowerShellの[オブジェクト]の
受け渡しが出来ません.必然的にテキストデータに変換してパイプラインをつなぐことになります.

たとえば,Get-ChildItemの出力をgrepやsed,awkで処理した場合,オブジェクトとしてのファイル情報は失われ,
Get-ChildItemが表示するテキストデータのみがgrepやsed,awkに引き渡されます.

(※ grepやsed,awkは UNIXツールです.別途ユーザ側で用意する必要があります)

■ PowerShellでコマンドプロンプト用バッチコマンドを実行

コマンドプロンプト用に作成されたバッチコマンドも,パスを指定することでPowerShellスクリプトと同様に
PowerShellプロンプトから実行できます.

たとえば,カレントディレクトリに,test.bat あるいは test.cmd というバッチコマンドがあるとき,
パスを指定して「.\test」で実行されます.(パス . はカレントディレクトリを意味します)
.\ の代わりに ./ としても構いません.

■ コマンドプロンプトの内部コマンドの実行

コマンドプロンプトの内部コマンド … copy,ren,del,dirなどを … を実行する時は,cmd.exeを起動しなければ
なりません.その場合のコマンドライン書式は以下の通りです.

cmd /c '内部コマンドのコマンドライン'

/cは,内部コマンド実行後にcmd.exeを終了するオプションです./cオプション無しで実行すると,単にcmd.exeを起動して,cmd.exeのコマンドプロンプになるだけです.
そのとき,exitコマンドでcmd.exeを終了するとPowerShellプロンプトに戻ります.


■ PowerShellを起動する

逆にコマンドプロンプトからPowerShellのコマンドレットやスクリプトを実行する方法を紹介します.

コマンドレットやPowerShellスクリプトは,PowerShell環境を起動して,PowerShell環境を介して実行
しなければなりません.

PowerShellの実体は,以下のファイルです.

%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe

(%SystemRoot%は一般的なWindows環境では,「C:\Windows」となります)

PowerShellのパスは環境変数PATHに登録済みですので,コマンドプロンプト,あるいはスタートメニュー
などで,[powershell]と入力するだけで PowerShell を起動できます.
PowerShellのプロンプトを終了する時は,コマンドプロンプトと同様に [exit] と入力します.

コマンドプロンプトのウィンドウを開いたまま,別のウィンドウとしてPowerShellを起動したい時は,
startコマンドを使って以下のように実行します.

start powershell


■ PowerShellコマンドレットをコマンドプロンプトから実行

コマンドプロンプトからPowerShellコマンドレットやPowerShellスクリプトを実行する方法は,
PowerShellプロンプトでコマンドプロンプトの内部コマンドを実行する時とよく似ています.

PowerShellコマンドレットはWindowsのネイティブ実行プログラムではないため,
PowerShell環境内でしか実行できません.

そのため,コマンドプロンプトなどの非PowerShell環境でコマンドレットを実行するには,
PowerShellを起動する必要があり,以下のような書式になります.

powershell -Command  PowerShellで実行するコマンドライン記述

たとえば,Get-ChildItem(省略形gci)をコマンドプロンプトから実行するには,コマンドプロンプトで以下のように
実行します.

powershell -Command gci

PowerShellはGet-ChildItemコマンドレットを実行した後,PowerShellを終了してコマンドプロンプトに戻ります.

ただし,powershellコマンドに複数のオプションを指定する時,他のオプションは必ず-Commandオプションより前に
指定して下さい.-Commandオプションより後ろの部分は,PowerShellが実行するコマンドラインとして解釈されます.

PowerShellを終了せずにPowerShellプロンプトを残すには, -NoExit オプションを使います.

powershell -NoExit -Command gci

■ パイプライン記述

PowerShellのパイプラインを使用する時は,PowerShellで実行するコマンドラインをダブルクォーテーション" "で
くくって下さい.以下のような書式になります.

powershell -Command "PowerShellのコマンドライン"

たとえば,Get-ChildItem(gci)の出力をFormat-Wide(省略形fw)で整形して表示するとき…
powershell -Command "gci | fw"

このようにすれば,"gci | fw"をPowerShell内で実行します.

■ PowerShellスクリプトの実行

PowerShellスクリプトを実行する時も,コマンドレットと同様にpowershellコマンドから実行できます.

powershell -Command PowerShellスクリプトファイル名

たとえば,「Hello! World」と表示するスクリプト Hello.ps1 をカレントディレクトリに作成して実行するとき,
コマンドプロンプトからは以下のように実行します.

powershell -Command .\Hello
スポンサーサイト
  1. 2013/06/14(金) 09:54:43|
  2. PowerShell
  3. | トラックバック:0
  4. | コメント:0
<<PowerShell の演算子やエスケープ文字など | ホーム | PowerShell 制御文>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://konoyonohana.blog.fc2.com/tb.php/32-31fcb343
この記事にトラックバックする(FC2ブログユーザー)