bash では、アンパサンド (&) を使用してコマンドをバックグラウンドで実行し、コマンドの実行が完了する前にインタラクティブな制御をユーザーに返すことができます。Powershellでこれを行う同等の方法はありますか?
bash での使用例:
sleep 30 &
bash では、アンパサンド (&) を使用してコマンドをバックグラウンドで実行し、コマンドの実行が完了する前にインタラクティブな制御をユーザーに返すことができます。Powershellでこれを行う同等の方法はありますか?
bash での使用例:
sleep 30 &
コマンドが実行可能ファイルまたは実行可能ファイルに関連付けられているファイルである限り、Start-Process (v2 から利用可能) を使用します。
Start-Process -NoNewWindow ping google.com
これを関数としてプロファイルに追加することもできます。
function bg() {Start-Process -NoNewWindow @args}
そして、呼び出しは次のようになります。
bg ping google.com
私の意見では、バックグラウンドでプロセスを実行するという単純なユース ケースでは、Start-Job はやり過ぎです。
注: 最初の例に関しては、スリープは Powershell コマンドレットであるため、「bg sleep 30」は機能しません。Start-Process は、実際にプロセスをフォークした場合にのみ機能します。
に渡されたスクリプト ブロックはStart-Job
、コマンドと同じ現在のディレクトリで実行されていないStart-Job
ようです。必要に応じて完全修飾パスを指定してください。
例えば:
Start-Job { C:\absolute\path\to\command.exe --afileparameter C:\absolute\path\to\file.txt }
ps2> start-job {start-sleep 20}
stdoutをリアルタイムで取得する方法をまだ理解していません。start-jobでは、get-jobを使用してstdoutをポーリングする必要があります。
更新:基本的にbash&operatorである、やりたいことを簡単に実行するためのジョブを開始できませんでした。これが私のこれまでの最高のハックです
PS> notepad $profile #edit init script -- added these lines
function beep { write-host `a }
function ajp { start powershell {ant java-platform|out-null;beep} } #new window, stderr only, beep when done
function acjp { start powershell {ant clean java-platform|out-null;beep} }
PS> . $profile #re-load profile script
PS> ajp
PowerShell ジョブ コマンドレットを使用して、目標を達成できます。
PowerShell で使用できるジョブ関連のコマンドレットは 6 つあります。
興味深い場合は、サンプルのHow to create background job in PowerShell をダウンロードできます
このようなことができます。
$a = start-process -NoNewWindow powershell {timeout 10; 'done'} -PassThru
そして、それを待ちたい場合:
$a | wait-process
ボーナス OSX または Linux バージョン:
$a = start-process pwsh '-c',{start-sleep 5; 'done'} -PassThru
私が持っているpingerスクリプトの例。引数は配列として渡されます。
$1 = start -n powershell pinger,comp001 -pa
ここで説明されているソリューションhttp://jtruher.spaces.live.com/blog/cns!7143DA6E51A2628D!130.entryを PowerShell v1.0 で正常に使用しました。PowerShell v2.0 では間違いなく簡単になります。