【Start-Process】PowerShellでプロセスをバックグラウンド起動する方法

こんにちは。チェシャ男です。(-皿-)

今回は、

【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つ起動していることがわかります。

最小化のPowershell起動-チェシャわら
(※見やすいように画像を一部加工しています)

“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” オプションは併用できない

コメントを残す

メールアドレスが公開されることはありません。