こんにちは。チェシャ男です。(-皿-)
今回は、Get-Processについて概要から使用例について簡単にご紹介します。
「コマンドレットリファレンス」カテゴリの記事では省略している情報を参照したい場合に本記事をご覧ください。
もくじ
はじめに
本記事は英語のリファレンス情報しかないコマンドレットについて「Get-Help」等の情報を参考に検証した結果を掲載しています。公式見解ではないことにご注意ください。
正式なヘルプを参照したい場合は、「Get-help Get-Process -online」を実行し公式ヘルプをご覧ください。
また、本記事内の例は動作を確認していますが、動作を確約しているわけではありません。
Get-Processの概要
Get-Processは、ローカルコンピュータまたはリモートコンピュータで実行されているプロセスを取得します。合わせて各プロセスのリソース利用状況も確認できます。
[blogcard url=”https://cheshire-wara.com/powershell/ps-cmdlets/system-service/get-process/”]基本構文
#パターン① Get-Process [[-Name] <String []>] [-ComputerName <String []> [-FileVersionInfo] [-Module] [<CommonParameters>] #パターン② Get-Process [-ComputerName <String []>] [-FileVersionInfo] -Id <Int32 []> [-Module] [<CommonParameters>] #パターン③ Get-Process [-ComputerName <String []>] [-FileVersionInfo] -InputObject <Process []> [-Module] [<CommonParameters>] #パターン④ Get-Process -Id <Int32 []> -IncludeUserName [<CommonParameters>] #パターン⑤ Get-Process [[-Name] <String []>] -IncludeUserName [<CommonParameters>] #パターン⑥ Get-Process -IncludeUserName -InputObject <Process [] [<CommonParameters>]
[]で囲まれたパラメーターは任意のオプションです。
{}で囲まれた箇所は要素を選択してください。
<>で囲まれた箇所はオブジェクトの型名を示しています。
動作の説明
Get-Processコマンドレットは、ローカルコンピュータまたはリモートコンピュータ上のプロセスを取得します。オプションを指定しない場合、このコマンドレットはローカルコンピュータ上のすべてのプロセスを取得します。
また、特定のプロセスを「プロセス名」または「プロセスID(PID)」で指定することができます。同様にパイプラインからGet-Processコマンドレットにプロセスオブジェクトを渡すこともできます。
Get-Processコマンドレットはプロセスの詳細情報を持つプロセスオブジェクトを出力し、プロセスの「開始」や「停止」を可能にするメソッドを持っています。
Get-Processコマンドレットのオプションによっては、プロセスで実行されるプログラムのファイルバージョン情報を取得したり、プロセスがロードしたモジュールを取得したりすることができます。
パラメータ
-ComputerName <String[]>
コマンドレットがプロセスを取得するコンピュータの対象を指定します。デフォルトはローカルコンピュータです。
1台以上のコンピュータのNetBIOS名、IPアドレス、または完全修飾ドメイン名(FQDN)を入力します。ローカルコンピュータを指定するには、「コンピュータ名」「ドット(.)」または「Localhost」を入力します。
コンピュータがリモートコマンドを実行できるように構成されていない場合でも、Get-ProcessコマンドレットではComputerNameオプションを使用できます。
-FileVersionInfo [<SwitchParameter>]
プロセスで実行されているプログラムのファイルバージョン情報を取得するためのオプションです。
所有していないプロセスでこのパラメータを使用するには、[管理者として実行]オプションを使用してWindows PowerShellを開く必要があります。
このオプションを使用すると「System.Diagnostics.Process」ではなく「System.Diagnotics.FileVersionInfo」を返します。
※Stop-Processなどの入力に「「System.Diagnostics.Process」」を必要とするコマンドレットに対して、FileVersionInfo型はパイプ渡しすることができません。
-Id <Int32[]>
プロセスID(PID)でプロセスを指定します。複数のIDを指定するには、カンマを使用してIDを区切ります。
-IncludeUserName [<SwitchParameter>]
出力されるProcessオブジェクトのUserName値が結果に出力されるようになります。
-InputObject <Process[]>
1つ以上のProcessオブジェクトを入力値として指定します。Processオブジェクトを格納している変数を指定するか、Processオブジェクトを取得するコマンドレットを指定します。
-Module [<SwitchParameter>]
プロセスが読み込んでいるモジュールを取得することができます。
所有していないプロセスでこのパラメータを使用するには、[管理者として実行]オプションを使用してWindows PowerShellを開く必要があります。
このオプションを使用すると、「System.Diagnostics.Process」ではなく「System.Diagnostics.ProcessModule」を返します。
※Stop-Processなどの入力に「「System.Diagnostics.Process」」を必要とするコマンドレットに対して、FileVersionInfo型はパイプ渡しすることができません。
-Name <String[]>
プロセス名で1つ以上のプロセスを指定します。複数のプロセス名(カンマで区切って)を入力し、ワイルドカード文字を使用できます。パラメータ名( “Name”)はオプションです。
<CommonParameters>
このコマンドレットは、
Verbose、Debug、ErrorAction、ErrorVariable、WarningAction、WarningVariable、OutBuffer、PipelineVariable、OutVariable
の各共通パラメーターをサポートしています。
入力値
System.Diagnostics.Process
(このコマンドレットにProcessオブジェクトをパイプすることができます。)
出力値
System.Diagnostics.Process
System.Diagnotics.FileVersionInfo
System.Diagnostics.ProcessModule
デフォルトでは「System.Diagnostics.Process」オブジェクトを返します。
FileVersionInfoパラメーターを使用すると「System.Diagnotics.FileVersionInfo」オブジェクトが返されます。
FileVersionInfoパラメーターを指定せずにModuleパラメーターを使用すると、「System.Diagnostics.ProcessModule」オブジェクトが返されます。
備考
Get-Process コマンドレットはエイリアス「ps」と「gps」で参照することもできます。
Windows の 64bitOS を実行しているコンピュータでは、64bit の PowerShell が 64bit プロセスモジュールのみを取得し、32bit の PowerShell では 32bit プロセスモジュールのみを取得します。
プロセスのデフォルト表示は、次の列を含む表です。
– Handles:プロセスが開いたハンドルの数
– NPM(K):プロセスが使用しているページングされていないメモリの量(キロバイト単位)
– PM(K):プロセスが使用しているページング可能メモリの量(キロバイト単位)
– WS(K):プロセスのワーキングセットのサイズ(キロバイト単位)
ワーキングセットは、プロセスによって最近参照されたメモリのページで構成されます
– VM(M):プロセスが使用している仮想メモリの量(メガバイト単位)
仮想メモリには、ディスク上のページングファイルに格納されます。
– CPU(s):プロセスがすべてのプロセッサで使用したプロセッサ時間の長さ(秒単位)
– ID:プロセスのプロセスID(PID)
– ProcessName:プロセスの名前
Start-TimeやPriorityなどFormat-Tableで利用可能なプロセスの組み込み代替ビューを使用して、独自のビューを設計することもできます。
使用例
例1:ローカルコンピュータ上のすべてのアクティブなプロセスの一覧を取得する
PS C:\>Get-Process
この例では、ローカルコンピュータ上で実行されているすべてのアクティブなプロセスの一覧を取得しています。
例2:1つ以上のプロセスに関するすべての利用可能なデータを取得する
PS C:\>Get-Process winword, explorer | Format-List *
この例では、コンピュータ上のWinwordプロセスとExplorerプロセスに関するすべての利用可能なデータを取得します。
Nameパラメータを使用してプロセスを指定しますが、オプションのパラメータ名は省略されています。パイプライン演算子(|)はデータをFormat-Listコマンドレットに渡します。
このコマンドレットは、WinwordおよびExplorerプロセスオブジェクトのすべての使用可能なプロパティを表示します。
例3:ワーキングセットが指定されたサイズより大きいすべてのプロセスを取得する
PS C:\>Get-Process | Where-Object {$_.WorkingSet -gt 20000000}
この例では、20 MBを超える作業セットを持つすべてのプロセスを取得します。
Get-Processコマンドレットを使用して、実行中のすべてのプロセスを取得します。パイプライン演算子(|)は、プロセスオブジェクトをWhere-Objectコマンドレットに渡します。
Where-Objectコマンドレットは、WorkingSetプロパティに対して20,000,000バイトを超える値を持つオブジェクトのみを選択します。 WorkingSetは、プロセスオブジェクトの多くのプロパティの1つです。
例4:優先度に基づいてグループ内のコンピュータ上のプロセスを一覧表示する
PS C:\>$A = Get-Process PS C:\>Get-Process -InputObject $A | Format-Table -View priority
この例では、、優先順位クラスに基づいて、コンピュータ上のプロセスをグループで一覧表示します。最初のコマンドは、コンピュータ上のすべてのプロセスを取得し、$ A変数に格納します。
2番目のコマンドは、InputObjectパラメーターを使用して、$ A変数に格納されているプロセスオブジェクトをGet-Processコマンドレットに渡します。
パイプライン演算子は、オブジェクトをFormat-Tableコマンドレットに渡します。このコマンドレットは、優先順位ビューを使用してプロセスをフォーマットします。
優先度ビューおよびその他のビューは、Windows PowerShellホームディレクトリ($ pshome)のPS1XML形式ファイルで定義されています。
例5:標準Get-Process出力表示にプロパティを追加する
PS C:\>Get-Process Powershell -ComputerName S1, localhost | ft @{Label="NPM(K)";Expression={[int]($_.NPM/1024)}}, @{Label="PM(K)";Expression={[int]($_.PM/1024)}},@{Label="WS(K)";Expression={[int]($_.WS/1024)}},@{Label="VM(M)";Expression={[int]($_.VM/1MB)}}, @{Label="CPU(s)";Expression={if ($_.CPU -ne $()) { $_.CPU.ToString("N")}}}, Id, MachineName, ProcessName -Auto NPM(K) PM(K) WS(K) VM(M) CPU(s) Id MachineName ProcessName ------ ----- ----- ----- ------ -- ----------- ----------- 6 23500 31340 142 1980 S1 powershell 6 23500 31348 142 4016 S1 powershell 27 54572 54520 576 4428 localhost powershell
この例では、Format-Table(alias = ft)コマンドを使用して、標準Get-Process出力ディスプレイにMachineNameプロパティを追加します。
例6:プロセスのバージョン情報を取得する
PS C:\>Get-Process powershell -FileVersionInfo ProductVersion FileVersion FileName -------------- ----------- -------- 6.1.6713.1 6.1.6713.1 (f... C:\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exe
この例では、FileVersionInfo パラメーターを使用して、PowerShell プロセスのメインモジュールである PowerShell.exe ファイルのバージョン情報を取得します。
Windows Vista およびそれ以降のバージョンの Windows で所有していないプロセスでこのコマンドを実行するには、[管理者として実行]オプションを使用して PowerShell を開く必要があります。
例7:指定されたプロセスがロードされたモジュールを取得する
PS C:\>Get-Process SQL* -Module
この例では、Module パラメータを使用して、プロセスによってロードされたモジュールを取得します。”-Module”を使用することで、名前がSQLで始まるプロセスのモジュールを取得します。
Windows Vista およびそれ以降のバージョンの Windows で、所有していないプロセスでこのコマンドを実行するには、[管理者として実行]オプションを使用して PowerShell を起動する必要があります。
例8:プロセスの所有者を見つける
PS C:\>$P = Get-WmiObject win32_process -Filter "name='powershell.exe'" PS C:\>$P.getowner() __GENUS : 2 __CLASS : __PARAMETERS __SUPERCLASS : __DYNASTY : __PARAMETERS __RELPATH : __PROPERTY_COUNT : 3 __DERIVATION : {} __SERVER : __NAMESPACE : __PATH : Domain : DOMAIN01 ReturnValue : 0 User : user01
この例は、プロセスの所有者を見つける方法です。
Get-Process が返す System.Diagnostics.Process オブジェクトには、プロセス所有者を返すプロパティまたはメソッドがないため、Get-WmiObject コマンドレットを使用して同じプロセスを表す Win32_Process オブジェクトを取得しています。
最初のコマンドは Get-WmiObject を使用して PowerShell プロセスを取得します。 それを $P 変数に保存します。
2番目のコマンドでは GetOwner メソッドを使用して、$P にプロセスの所有者を取得しています。 コマンドは、所有者が Domain01\user01 であることを示します。
例9:自動変数を使用して、現在のセッションをホストしているプロセスを特定する
PS C:\>Get-Process powershell Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName ------- ------ ----- ----- ----- ------ -- ----------- 308 26 52308 61780 567 3.18 5632 powershell 377 26 62676 63384 575 3.88 5888 powershell PS C:\>Get-Process -Id $pid Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName ------- ------ ----- ----- ----- ------ -- ----------- 396 26 56488 57236 575 3.90 5888 powershell
これらのコマンドは、$pid 自動変数を使用して現在の PowerShell セッションをホストしているプロセスを識別する方法を示しています。
この方法を使用して、ホストプロセスを停止または終了したい他の PowerShell プロセスと区別することができます。
例10:メインウィンドウのタイトルを持つすべてのプロセスを取得し、テーブルに表示する
PS C:\>Get-Process | where {$_.mainWindowTitle} | Format-Table id, name, mainwindowtitle -autosize
この例では、メインウィンドウタイトルを持つすべてのプロセスを取得し、プロセスIDとプロセス名を持つテーブルに表示しています。
mainWindowTitleプロパティは、Get-Processが返すProcessオブジェクトの多くの便利なプロパティの1つに過ぎません。
すべてのプロパティを表示するには、Get-Processコマンドの結果をGet-Memberコマンドレット(get-process | get-member)にパイプします。
[…] Get-Process(→ コマンドレットの詳細はこちら) […]