Windows Powershell でコマンドを実行するときにロックしないようにするにはどうすればよいですか? Linux では、コマンドの最後に & を追加して、そのプロセスを閉じずにターミナルを引き続き使用できることは知っています。Windows Powershell でも同様の機能がありますか?
答え1
コマンドを実行するときに Windows Powershell がロックされないようにするにはどうすればよいですか?
コマンドレットを使用してStart-Job
、バックグラウンドでジョブを開始します。
&
これは、Unix/Linux のコマンドの最後で使用するのと同等の Powershell です。
PowerShell バックグラウンドジョブ
PowerShell バックグラウンド ジョブを作成する最も簡単な方法は、
Start-Job
コマンドレットを使用することです。コマンドレットを使用してスクリプト ブロックを指定できます。たとえば、次のコマンドは、1 から 50 までの数字を取得する単純なスクリプト ブロックをバックグラウンド ジョブとして実行します。Start-Job {1..50}
次の 1 行のコマンドを使用して、スクリプト ブロックに引数を渡すことができます。
Start-Job {Param($log,$newest) Get-EventLog $log Newest $newest} -ArgumentList "system",25
または、スクリプトを実行することもできます:
Start-Job -FilePath C:\scripts\Send-UptimeMail.ps1 -ArgumentList (Get-Credential [email protected])
以下の 3 つのコマンドの結果を確認できます。これらのコマンドは PowerShell 3.0 で実行しました。ただし、PSJobTypeName 列は表示されませんが、PowerShell 2.0 でも機能します。
出力は
Start-Job
ジョブ キュー オブジェクトです。-Job
コマンドレットを使用してジョブとその結果を管理します。ジョブは ID で参照できます。上の画像では、ジョブ ID が 1 から 3、そして 5 へとジャンプしていることに注目してください。
上記のリンクでは、以下のトピックについてさらに詳しく説明しています。
コマンドレットを使用して
Get-WMIObject
バックグラウンドジョブを作成するコマンドレットを使用して
Invoke-Command
バックグラウンドジョブを作成するバックグラウンドジョブの管理
ジョブ結果の取得
ジョブを停止して待機する
参考文献
答え2
ジョブの代わりに使用できる実行スペース: バックグラウンドでコマンドを実行すると、パフォーマンスが向上し、オーバーヘッドが削減されます。
実装: