こんにちは。チェシャ男です。(-皿-)
今回は、
【PowerShell で別プロセスをバックグラウンド起動する方法】
についてご紹介します。
Start-Process コマンドレットでは “-WindowStyle” オプションで起動時のウィンドウ状態を指定することができます。
Start-Process で新たにプロセスを立ち上げてアプリケーションを動かす場合、「バックグラウンドで処理させたいなぁ」という時にこのオプションを活用しましよう!
別プロセスを立ち上げる基本的な方法についてはこちら↓の記事をご参考ください。
[blogcard url=”https://cheshire-wara.com/powershell/ps-cmdlets/system-service/start-process/”]
もくじ
WindowStyle オプションの指定方法
プロセスを開始するコマンドレット
Start-Process
の使い方は以下をご覧ください。
【コマンドレット】
Start-Process
【オプション】
パターン1
-FilePath <実行ファイルパス>
-ArgumentList <開始プロセスの引数>
-Credential <ユーザ情報>
-WorkingDirectory <string>
-LoadUserProfile
–NoNewWindow
-PassThru
-RedirectStandardError <プロセス上のエラー出力先>
-RedirectStandardInput <プロセスへの入力ファイル>
-RedirectStandardOutput <プロセスからの出力ファイル>
–WindowStyle <ウィンドウの状態>
-Wait
-UseNewEnvironmentパターン2
-FilePath <実行ファイルパス>
-ArgumentList <開始プロセスの引数>
-WorkingDirectory <プロセスの実行場所>
-PassThru
-Verb <プロセス開始時の動作>
–WindowStyle <ウィンドウの状態>
-Wait【入力】
None
【出力】
None
System.Diagnostics.Process【エイリアス】
saps
start
プロセスとは何か」については「プロセスとは…」をご覧下さい。
まずは WindowStyle オプションの動作について順を追って解説します。
“Normal” を指定して通常起動する
WindowStyle オプションで「Normal」を指定することでプロセスを通常起動させることができます。つまり、いつものようにクリックして起動したときと同じですね。
指定方法は
Start-Process 起動対象 -WindowStyle Normal
です。
試しに別プロセスとして「PowerShell」をもう1つ起動してみましょう。
PowerShell の実行ファイルにはパスが通っているので “-FilePath” オプションに「powershell」を指定します。
また、今回は別プロセスとして起動したPowerShellと区別するために “-PassThru” オプションを使用します。
“-PassThru” オプションとは通常戻り値が発生しないコマンドレットに対して戻り値(オブジェクト)を返させるというものです。
PS C:\work> #現在実行中のプロセス PS C:\work> Get-Process -Name powershell Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id SI ProcessName ------- ------ ----- ----- ----- ------ -- -- ----------- 610 18 47300 62248 253 1.97 5252 1 powershell PS C:\work> PS C:\work> #別プロセスを起動 PS C:\work> Start-Process -FilePath powershell -WindowStyle Normal -PassThru Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id SI ProcessName ------- ------ ----- ----- ----- ------ -- -- ----------- 3 1 144 780 6 0.00 5996 1 powershell PS C:\work> PS C:\work> #PowerShellプロセスを確認 PS C:\work> Get-Process -Name powershell Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id SI ProcessName ------- ------ ----- ----- ----- ------ -- -- ----------- 772 18 47320 62396 253 2.04 5252 1 powershell 339 12 36660 38208 205 0.23 5996 1 powershell
実行結果を見ると新たにプロセスが立ち上がっていることがわかります。
実際に起動してきた PowerShell 画面を見てみると下のように通常サイズであることがわかります。
“Maximized” を指定して最大化で起動する
WindowStyle オプションで「Maximized」を指定することでプロセスを最大化状態で起動させることができます。最大化状態で起動させたい時や最大化する手間を省きたい時に使えますね。
指定方法は
Start-Process 起動対象 -WindowStyle Maximized
です。
先ほどと同様に別プロセスとして「PowerShell」をもう1つ起動してみましょう。
今回も別プロセスとして起動した PowerShell と区別するために “-PassThru” オプションを使用します。
PS C:\work> #現在実行中のプロセス PS C:\work> Get-Process -Name powershell Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id SI ProcessName ------- ------ ----- ----- ----- ------ -- -- ----------- 674 18 49804 64932 264 2.31 5252 1 powershell PS C:\work> PS C:\work> #別プロセスを起動 PS C:\work> Start-Process -FilePath powershell -WindowStyle Maximized -PassThru Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id SI ProcessName ------- ------ ----- ----- ----- ------ -- -- ----------- 3 1 144 800 6 0.00 3404 1 powershell PS C:\work> PS C:\work> #PowerShellプロセスを確認 PS C:\work> Get-Process -Name powershell Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id SI ProcessName ------- ------ ----- ----- ----- ------ -- -- ----------- 339 12 36644 38204 205 0.23 3404 1 powershell 524 18 49936 65084 264 2.34 5252 1 powershell
実行結果を見ると新たにプロセスが立ち上がっていることがわかります。
実際に起動してきた PowerShell 画面を見てみると下のように最大化状態であることがわかります。右上のボタンが「元に戻す(縮小)」になっていますね。
“Minimized” を指定して最小化で起動する
最小化状態とはタスクバー上に格納された状態(ウィンドウが隠された状態)の事を指します。
下の画像のボタンを押したときに最小化されます。
WindowStyle オプションで「Minimized」を指定することでプロセスの起動時に最小化させることができます。
指定方法は
Start-Process 起動対象 -WindowStyle Minimized
です。
同じく別プロセスとして「PowerShell」をもう1つ起動します。
今回も別プロセスとして起動した PowerShell と区別するために “-PassThru” オプションを使用します。
PS C:\work> #現在実行中のプロセス PS C:\work> Get-Process -Name powershell Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id SI ProcessName ------- ------ ----- ----- ----- ------ -- -- ----------- 702 18 50028 65632 264 2.50 5252 1 powershell PS C:\work> PS C:\work> #別プロセスを起動 PS C:\work> Start-Process -FilePath powershell -WindowStyle Minimized -PassThru Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id SI ProcessName ------- ------ ----- ----- ----- ------ -- -- ----------- 3 1 144 800 6 0.00 5400 1 powershell PS C:\work> PS C:\work> #PowerShellプロセスを確認 PS C:\work> Get-Process -Name powershell Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id SI ProcessName ------- ------ ----- ----- ----- ------ -- -- ----------- 754 18 49988 65612 264 2.51 5252 1 powershell 322 12 36368 37984 204 0.22 5400 1 powershell
実行結果を見ると新たにプロセスが立ち上がっていることがわかりますが実際にはウィンドウは立ち上がってきません。
しかしタスクバーを見てみると下の画像のように PowerShell が2つ起動していることがわかります。
(※見やすいように画像を一部加工しています)
“Hidden” を指定してバックグラウンドで起動する
さて、本題のバックグラウンド起動する方法についてです。
WindowStyle オプションで「Hidden」を指定することでプロセスをバックグラウンド起動させることができます。
バックグラウンド起動させた場合は最小化状態での起動とは違いタスクバーにも表示されません。
指定方法は
Start-Process 起動対象 -WindowStyle Hidden
です。
別プロセスとして「PowerShell」をもう1つ起動します。
今回も別プロセスとして起動した PowerShell と区別するために “-PassThru” オプションを使用します。
PS C:\work> #現在実行中のプロセス PS C:\work> Get-Process -Name powershell Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id SI ProcessName ------- ------ ----- ----- ----- ------ -- -- ----------- 565 18 50152 65804 264 2.68 5252 1 powershell PS C:\work> PS C:\work> #別プロセスを起動 PS C:\work> Start-Process -FilePath powershell -WindowStyle Hidden -PassThru Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id SI ProcessName ------- ------ ----- ----- ----- ------ -- -- ----------- 3 1 144 800 6 0.00 2512 1 powershell PS C:\work> PS C:\work> #PowerShellプロセスを確認 PS C:\work> Get-Process -Name powershell Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id SI ProcessName ------- ------ ----- ----- ----- ------ -- -- ----------- 290 11 36220 36016 198 0.19 2512 1 powershell 666 18 50176 65824 265 2.73 5252 1 powershell
実行結果を見ると新たにプロセスが立ち上がっていますがウィンドウは立ち上がってきません。
また、最小化の時とは異なりタスクバーを見ても Poweshell が二重起動している様子はありません。
完全にバックグラウンドつまり私たちからは見えないところで起動されています。
今回のように Powershell 自体をバックグラウンド起動しても何も恩恵はありませんが
- スクリプトを裏で実行する
- 定期的にバックアップを実行させる
といったウィンドウを表示させる必要が無い場合に使用します。
ちなみに停止したい時は「Stop-Process」でプロセスIDを指定して実行します。
[blogcard url=”https://cheshire-wara.com/powershell/ps-cmdlets/system-service/stop-process/”]実際に実行してみます。
PS C:\work> #停止するプロセスのプロセスIDを指定 PS C:\work> Stop-Process -Id 2512 PS C:\work> PS C:\work> #停止を確認 PS C:\work> Get-Process -Name powershell Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id SI ProcessName ------- ------ ----- ----- ----- ------ -- -- ----------- 533 18 50176 65844 264 2.78 5252 1 powershell
このように、バックグラウンドで実行されている見えないプロセスでも停止することができます。
よく似た NoNewWindow オプションとは
“WindowStyle” オプションとよく似た “NoNewWindow” オプションというものが存在します。
このオプションの意味は、
新たにウィンドウを立ち上げない
というものです。
つまり現在操作中のプロンプト画面に新しいプロセスを立ち上げるということです。
入れ子構造で起動すると考えるとイメージしやすいかもしれません。
PS C:\work> #プロセスの状態を確認 PS C:\work> Get-Process -Name powershell Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id SI ProcessName ------- ------ ----- ----- ----- ------ -- -- ----------- 533 18 50176 65844 264 2.78 5252 1 powershell PS C:\work> PS C:\work> #NoNewWindowを指定 PS C:\work> Start-Process -FilePath powershell -NoNewWindow -PassThru Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id SI ProcessName ------- ------ ----- ----- ----- ------ -- -- ----------- 11 1 144 820 6 0.00 6092 1 powershell PS C:\work> Windows PowerShell Copyright (C) 2015 Microsoft Corporation. All rights reserved. PS C:\work> #同じ画面内に新たに起動している PS C:\work> Get-Process -Name powershell Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id SI ProcessName ------- ------ ----- ----- ----- ------ -- -- ----------- 523 18 50212 65960 264 2.87 5252 1 powershell 338 11 40264 41776 203 0.31 6092 1 powershell
“WindowStyle” と混同しやすいので注意が必要です。
また “WindowStyle” オプションと “NoNewWindow” オプションは同時に使用することができないので
PS C:\work> #同時に使用 PS C:\work> Start-Process -FilePath powershell -WindowStyle Minimized -NoNewWindow -PassThru Start-Process : パラメーター "-NoNewWindow" と "-WindowStyle" を同時に指定することはできません。 発生場所 行:1 文字:1 + Start-Process -FilePath powershell -WindowStyle Minimized -NoNewWindow -PassThru + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [Start-Process]、InvalidOperationException + FullyQualifiedErrorId : InvalidOperationException,Microsoft.PowerShell.Commands.StartProcessCommand
と、このように両方を指定した場合はエラーとなります。
まとめ
プロセス起動時にウィンドウ状態を指定する場合は
Start-Process 起動対象 -WindowStyle ○○
を使用する。
○○に以下の4つの中から状態を指定できる
Normal => 通常サイズ
Minimized=> 最大化
Maximized=> 最小化
Hidden =>バックグラウンド
バックグラウンド起動するには ”-WindowStyle Hidden” を指定する。
また、”WindowStyle” と “NoNewWindow” オプションは併用できない