Get-Counter
ローカル コンピューターおよびリモート コンピューターからパフォーマンス カウンター データを取得します。
構文
Get-Counter [-Counter] <string[]> [-ComputerName <string[]>] [-Continuous] [-MaxSamples <Int64>] [-SampleInterval <int>] [<CommonParameters>]
Get-Counter -ListSet <string[]> [-ComputerName <string[]>] [<CommonParameters>]
説明
Get-Counter コマンドレットは、Windows のパフォーマンス モニター インストルメンテーションから直接リアルタイムのパフォーマンス カウンター データをライブで取得します。このコマンドレットを使用して、指定したサンプル間隔でローカル コンピューターまたはリモート コンピューターからパフォーマンス データを取得できます。
パラメーターを指定しなかった場合、"Get-Counter" コマンドは、一連のシステム カウンターに関するカウンター データを取得します。
Get-Counter のパラメーターを使用すると、1 つまたは複数のコンピューターを指定したり、パフォーマンス カウンター セットとそのセットに含まれているカウンターを一覧表示したり、サンプル サイズと間隔を設定したりできます。
パラメーター
-ComputerName <string[]>
指定されたコンピューターからデータを取得します。コンピューターの NetBIOS 名、インターネット プロトコル (IP) アドレス、または完全修飾ドメイン名を入力します。既定値はローカル コンピューターです。
注: Get-Counter は、Windows PowerShell リモート処理に依存しません。コンピューターが Windows PowerShell リモート処理用に構成されていない場合でも、Get-Counter の ComputerName パラメーターを使用できます。
必須 |
false |
位置 |
named |
既定値 |
|
パイプライン入力を許可する |
false |
ワイルドカード文字を許可する |
false |
-Continuous
ユーザーが Ctrl キーを押しながら C キーを押すまで、サンプルを継続的に取得します。既定では、Get-Counter はカウンター サンプルを 1 つだけ取得します。SampleInterval パラメーターを使用すると、継続的サンプリングの間隔を設定できます。
必須 |
false |
位置 |
named |
既定値 |
|
パイプライン入力を許可する |
false |
ワイルドカード文字を許可する |
false |
-Counter <string[]>
指定されたパフォーマンス カウンターからデータを取得します。1 つ以上のカウンター パスを入力します。Instance 値にのみワイルドカードを使用できます。パイプを使用してカウンター パス文字列を Get-Counter に渡すこともできます。
各カウンター パスの形式は、次のとおりです。
"[\\<ComputerName>]\<CounterSet>(<Instance>)\<CounterName>"
次にその例を示します。
"\\Server01\Processor(2)\% User Time"
<ComputerName> 要素は省略可能です。省略すると、Get-Counter は ComputerName パラメーターの値を使用します。
注: 正しい形式のカウンター パスを取得するには、ListSet パラメーターを使用してパフォーマンス カウンター セットを取得します。各パフォーマンス カウンター セットの Paths プロパティおよび PathsWithInstances プロパティには、個々のカウンター パスが文字列形式で含まれています。カウンター パス文字列を変数に保存するか、パイプを使用して文字列を直接別の Get-Counter コマンドに渡すことができます。具体的な方法については、例を参照してください。
必須 |
true |
位置 |
2 |
既定値 |
|
パイプライン入力を許可する |
true (ByValue) |
ワイルドカード文字を許可する |
true |
-ListSet <string[]>
コンピューター上の指定されたパフォーマンス カウンター セットを取得します。カウンター セットの名前を入力します。ワイルドカードを使用できます。パイプを使用してカウンター セット名を Get-Counter に渡すこともできます。
必須 |
true |
位置 |
named |
既定値 |
|
パイプライン入力を許可する |
true (ByValue, ByPropertyName) |
ワイルドカード文字を許可する |
true |
-MaxSamples <Int64>
各カウンターから取得するサンプルの数を指定します。既定は 1 サンプルです。サンプルを継続的に取得する (サンプルの最大サイズを指定しない) には、Continuous パラメーターを使用します。
非常に大きなデータ セットを収集する場合は、Get-Counter コマンドを Windows PowerShell バックグラウンド ジョブとして実行することを検討してください。詳細については、「about_Jobs」と「Start-Job」を参照してください。
必須 |
false |
位置 |
named |
既定値 |
|
パイプライン入力を許可する |
false |
ワイルドカード文字を許可する |
false |
-SampleInterval <int>
サンプル間の時間を秒単位で指定します。最小値および既定値は 1 秒です。
必須 |
false |
位置 |
named |
既定値 |
1 |
パイプライン入力を許可する |
false |
ワイルドカード文字を許可する |
false |
<CommonParameters>
このコマンドレットは、次の共通パラメーターをサポートします: -Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer、および -OutVariable。詳細については、次を参照してください: about_Commonparameters.
入力と出力
入力値の型は、コマンドレットへのパイプが可能なオブジェクトの型です。戻り値の型は、コマンドレットによって返されるオブジェクトの型です。
入力 |
System.String[] パイプを使用してカウンター パスおよびカウンター セット (ListSet) 名を Get-Counter に渡すことができます。 |
出力 |
Microsoft.PowerShell.Commands.GetCounter.CounterSet、Microsoft.PowerShell.Commands.GetCounter.PerformanceCounterSampleSet、Microsoft.PowerShell.Commands.GetCounter.PerformanceCounterSample ListSet パラメーターは、Microsoft.PowerShell.Commands.GetCounter.CounterSet オブジェクトを取得します。Counter パラメーターは、Microsoft.PowerShell.Commands.GetCounter.PerformanceCounterSampleSet オブジェクトを取得します。各カウンター値は、Microsoft.PowerShell.Commands.GetCounter.PerformanceCounterSample オブジェクトです。 |
注
通常、パフォーマンス カウンターはアクセス制御リスト (ACL) によって保護されています。利用可能なすべてのパフォーマンス カウンターを取得するには、[管理者として実行] を指定して Windows PowerShell を開きます。
既定では、Get-Counter は 1 秒のサンプル間隔の間に 1 サンプルを取得します。この動作を変更するには、MaxSamples パラメーターと Continuous パラメーターを使用します。
設定した MaxSamples および SampleInterval の値は、そのコマンド内ですべてのコンピューター上のすべてのカウンターに適用されます。それぞれのカウンターに異なる値を設定するには、各カウンターに個別の Get-Counter コマンドを入力します。
例 1
C:\PS># Get-Counter
説明
-----------
このコマンドは、ローカル コンピューター上のすべてのカウンター セットを取得します。
C:\PS> get-counter -ListSet *
多くのカウンター セットはアクセス制御リスト (ACL) によって保護されているため、すべてのカウンター セットを確認するには、Get-Counter コマンドを使用する前に、[管理者として実行] を指定して Windows PowerShell を開きます。
例 2
C:\PS># Get-Counter
説明
-----------
このコマンドは、ローカル コンピューター上にあるすべてのプロセッサの現在の "% Processor Time" 合計値を取得します。値の数が 3 つになるまで、2 秒ごとにデータが収集されます。
C:\PS> get-counter -Counter "\Processor(_Total)\% Processor Time" -SampleInterval 2 -MaxSamples 3
例 3
C:\PS># Get-Counter
説明
-----------
このコマンドは、ローカル コンピューター上のすべてのカウンター セット名をアルファベット順に並べ替えた一覧を取得します。
C:\PS> get-counter -listset * | sort-object countersetname | format-table countersetname
例 4
C:\PS># Get-Counter
説明
-----------
これらのコマンドは、カウンター セットの Paths プロパティを使用して、パフォーマンス カウンターの正しい形式のパス名を検索します。このようなコマンドを使用し、正しいカウンター パス名を取得できます。
最初のコマンドは、ローカル コンピューター上の Memory カウンター セットにあるパフォーマンス カウンターのパス名を取得します。
C:\PS> (get-counter -listset memory).paths
\Memory\Page Faults/sec
\Memory\Available Bytes
\Memory\Committed Bytes
\Memory\Commit Limit
\Memory\Write Copies/sec
\Memory\Transition Faults/sec
\Memory\Cache Faults/sec
\Memory\Demand Zero Faults/sec
\Memory\Pages/sec
\Memory\Pages Input/sec
...
2 番目のコマンドは、"cache" を含むパス名を取得します。
C:\PS> (get-counter -listset memory).paths | where {$_ -like "*cache*"}
\Memory\Cache Faults/sec
\Memory\Cache Bytes
\Memory\Cache Bytes Peak
\Memory\System Cache Resident Bytes
\Memory\Standby Cache Reserve Bytes
\Memory\Standby Cache Normal Priority Bytes
\Memory\Standby Cache Core Bytes
例 5
C:\PS># Get-Counter
説明
-----------
これらのコマンドは、Server01 および Server02 コンピューターから Disk Reads/sec カウンター データを取得します。
最初のコマンドは、Disk Reads/sec カウンター パスを $diskreads 変数に保存します。
C:\PS> $diskreads = "\LogicalDisk(C:)\Disk Reads/sec"
2 番目のコマンドは、パイプライン演算子 (|) を使用して、$diskreads 変数に保存されているカウンター パスを Get-Counter コマンドレットに送ります。このコマンドは、MaxSamples パラメーターを使用して、出力されるサンプルの数を 10 個に制限します。
C:\PS> $diskreads | get-counter -computer Server01, Server02 -maxsamples 10
例 6
C:\PS># Get-Counter
説明
-----------
このコマンドは、PhysicalDisk パフォーマンス カウンターの正しい形式のパス名 (インスタンス名を含む) を取得します。
C:\PS> (get-counter -list physicaldisk).pathswithinstances
例 7
C:\PS># Get-Counter
説明
-----------
これらのコマンドは、エンタープライズ内の無作為に選択した 50 台のコンピューター上にある "% DPC Time" パフォーマンス カウンターの値を取得します。
最初のコマンドは、Get-Content コマンドレットを使用して、Servers.txt ファイルからエンタープライズ サーバーの一覧を取得します。次に、Get-Random コマンドレットを使用して、Servers.txt ファイルの内容から無作為に 50 個のサーバー名を選択します。結果は $servers 変数に保存されます。
C:\PS> $servers = get-random (get-content servers.txt) -count 50
2 番目のコマンドは、"% DPC Time" コマンドレットのカウンター パスを $counter 変数に保存します。カウンター パスでは、各コンピューターのすべてのプロセッサに関するデータを取得するために、インスタンス名にワイルドカード文字が含まれています。
C:\PS> $counter = "\Processor(*)\% DPC Time"
3 番目のコマンドは、Get-Counter コマンドレットを使用してカウンター値を取得します。このコマンドは、Counter パラメーターを使用してカウンターを指定し、ComputerName パラメーターを使用して $servers 変数に保存されているコンピューターを指定します。
C:\PS> get-counter -Counter $counter -computername $servers
例 8
C:\PS># Get-Counter
説明
-----------
これらのコマンドは、ローカル コンピューター上の memory カウンター セットにあるすべてのパフォーマンス カウンターに対して単一の値を取得します。
最初のコマンドは、カウンター パスを取得して、$memCounters 変数に保存します。
C:\PS> $memCounters = (get-counter -list memory).paths
2 番目のコマンドは、Get-Counter コマンドレットを使用して、各カウンターのカウンター データを取得します。また、Counter パラメーターを使用して、$memCounters 変数に保存されているカウンターを指定します。
C:\PS> get-counter -counter $memCounters
例 9
C:\PS># Get-Counter
説明
-----------
この例では、各データ サンプルを表す PerformanceCounterSample オブジェクトのプロパティ値を示します。
最初のコマンドは、カウンター パスを $counter 変数に保存します。
C:\PS> $counter = "\\SERVER01\Process(Idle)\% Processor Time"
2 番目のコマンドは、Get-Counter コマンドレットを使用して、カウンター値のサンプルを 1 つ取得します。結果は $data 変数に保存されます。
C:\PS> $data = get-counter $counter
3 番目のコマンドは、Format-List コマンドレットを使用して、サンプル セット オブジェクトのすべての CounterSamples プロパティを一覧表示します。
C:\PS> $data.countersamples | format-list -property *
Path : \\SERVER01\process(idle)\% processor time
InstanceName : idle
CookedValue : 198.467899571389
RawValue : 14329160321003
SecondValue : 128606459528326201
MultipleCount : 1
CounterType : Timer100Ns
Timestamp : 7/15/2008 6:39:12 PM
Timestamp100NSec : 128606207528320000
Status : 0
DefaultScale : 0
TimeBase : 10000000
CounterSamples オブジェクトのプロパティを使用して、データの確認、選択、並べ替え、およびグループ化を行うことができます。
例 10
C:\PS># Get-Counter
説明
-----------
このコマンドは、Get-Counter コマンドをバックグラウンド ジョブとして実行します。詳細については、「Start-Job」を参照してください。
C:\PS> $counters = "\LogicalDisk(_Total)\% Free Space"
C:\PS> start-job -scriptblock {get-counter -counter $counters -maxsamples 1000)
例 11
C:\PS># Get-Counter
説明
-----------
このコマンドは、Get-Counter および Get-Random コマンドレットを使用して、Servers.txt ファイルから無作為に選択した 50 台のコンピューター上の空きディスク領域の割合を調べます。
C:\PS> get-counter -computername (get-random servers.txt -count 50) -counter "\LogicalDisk(*)\% Free Space"
例 12
C:\PS># Get-Counter
説明
-----------
この例では、カウンター データとその生成元のコンピューターとを関連付ける方法、およびデータを操作する方法を示します。
最初のコマンドは、Get-Counter コマンドレットを使用して、S1 および S2 という 2 つのリモート コンピューターから "LogicalDisk\% Free Space" カウンター値を取得します。結果は $a 変数に保存されます。
$a = get-counter "\LogicalDisk(_Total)\% Free Space" -comp s1, s2
2 番目のコマンドは $a 変数に保存された結果を表示します。すべてのデータがオブジェクトに保存されますが、この形式では簡単に確認できません。
C:\PS> $a
Counter Paths: \\s1\\logicaldisk(c:)\% free space, \\s1\\logicaldisk(d:)\% free space, \\s1\\logicaldisk(_total)\% free space, \\s2\\logicaldisk(c:)\% free space, \\s2\\logicaldisk(_total)\% free space
Timestamp : 7/15/2008 5:09:08 PM
Cooked Values : "0.327058823529412", "17.8952248493278", "12.9994033060778", "75.0754805595626", "75.0754805595626"
3 番目のコマンドは、Get-Counter により返された PerformanceCounterSampleSet オブジェクトの CounterSamples プロパティの値をテーブルとして表示します (オブジェクトのすべてのプロパティおよびメソッドを表示するには、パイプを使用してその値を Get-Member コマンドレットに渡します)。
C:\PS> $a.countersamples | format-table -auto
Path InstanceName CookedValue
---- ------------ -----------
\\s1\\logicaldisk(c:)\% free space c: 0.327058823529412
\\s1\\logicaldisk(d:)\% free space d: 17.8952248493278
\\s1\\logicaldisk(_total)\% free space _total 12.9994033060778
\\s2\\logicaldisk(c:)\% free space c: 75.0754805595626
\\s2\\logicaldisk(_total)\% free space _total 75.0754805595626
CounterSamples プロパティには、PerformanceCounterSample オブジェクトがそのプロパティおよびメソッドと共に含まれています。4 番目のコマンドは、配列表記を使用して最初のカウンター サンプルを取得し、パイプライン演算子を使用してカウンター サンプル オブジェクトを Format-List コマンドレットに送信します。カウンター サンプルのすべてのプロパティおよびメソッドが一覧表示されます。この方法では、各カウンター サンプル オブジェクトに含まれるデータを詳細に表示できます。
5 番目のコマンドは、カウンター サンプルからデータを選択する方法を示しています。このコマンドは、Where-Object コマンドレットを使用して、15 未満の CookedValue を持つカウンター サンプルのみを取得します。
C:\PS> $a.countersamples | where {$_.cookedvalue -lt 15}
Path InstanceName CookedValue
---- ------------ -----------
\\s1\\logicaldisk(c:)\% free space c: 0.327058823529412
\\s1\\logicaldisk(_total)\% free space _total 12.9994033060778
例 13
C:\PS># Get-Counter
説明
-----------
この例では、取得したパフォーマンス カウンター データを並べ替える方法を示します。この例では、サンプリング時にプロセッサ時間が最も長いコンピューター上のプロセスを検索します。
最初のコマンドは、コンピューター上のすべてのプロセスの "Process\% Processor Time" カウンターを取得します。結果は $p 変数に保存されます。
C:\PS> $p = get-counter '\Process(*)\% Processor Time'
2 番目のコマンドは、$p に保存されているサンプル セット オブジェクトの CounterSamples プロパティを取得し、サンプルの処理済みの値 (CookedValue) に基づいてサンプルを降順に並べ替えます。このコマンドは、Format-Table コマンドレットとその AutoFormat パラメーターを使用し、テーブルの列を配置します。
C:\PS> $p.CounterSamples | sort-object -property CookedValue -Descending | format-table -auto
Path InstanceName CookedValue
---- ------------ -----------
\\server01\process(_total)\% processor time _total 200.00641042078
\\server01\process(idle)\% processor time idle 200.00641042078
\\server01\process(explorer#1)\% processor time explorer 0
\\server01\process(dwm#1)\% processor time dwm 0
\\server01\process(taskeng#1)\% processor time taskeng 0
\\server01\process(taskhost#1)\% processor time taskhost 0
\\server01\process(winlogon)\% processor time winlogon 0
\\server01\process(csrss)\% processor time csrss 0
例 14
C:\PS># Get-Counter
説明
-----------
これらのコマンドは、ワーキング セットが最大であるコンピューター上のプロセスを検索します。プロセスをワーキング セットのサイズに基づいて降順に一覧表示します。
最初のコマンドは、各プロセスの "Process\Working Set - Private" カウンターのサンプルを 1 つ取得します。このコマンドは、カウンター データを $ws 変数に保存します。
C:\PS> $ws = get-counter "\Process(*)\Working Set - Private"
2 番目のコマンドは、パイプライン演算子 (|) を使用して、$ws 変数の CounterSamples プロパティのデータを Sort-Object コマンドレットに送信し、プロセス データを CookedValue プロパティの値で降順に並べ替えます。また、別のパイプラインを使用して、並べ替えたデータを Format-Table コマンドレットに送信し、InstanceName 列および CookedValue 列を持つテーブルの形式でデータを表示します。
C:\PS> $ws.countersamples | sort-object -property cookedvalue -descending | format-table -property InstanceName, CookedValue -auto
InstanceName CookedValue
------------ -----------
_total 162983936
svchost 40370176
powershell 15110144
explorer 14135296
svchost 10928128
svchost 9027584
...
例 15
C:\PS># Get-Counter
説明
-----------
このコマンドは、Processor\% Processor Time カウンターの一連のサンプルを既定の 1 秒間隔で取得します。コマンドを停止するには、Ctrl キーを押しながら C キーを押します。
C:\PS> get-counter -counter "\processor(_total)\% processor time" -continuous