Get-Counter

Pobiera dane licznika wydajności z komputerów lokalnych i zdalnych.

Składnia

Get-Counter
   [[-Counter] <String[]>]
   [-SampleInterval <Int32>]
   [-MaxSamples <Int64>]
   [-Continuous]
   [-ComputerName <String[]>]
   [<CommonParameters>]
Get-Counter
   [-ListSet] <String[]>
   [-ComputerName <String[]>]
   [<CommonParameters>]

Opis

To polecenie cmdlet jest dostępne tylko na platformie Windows.

Polecenie Get-Counter cmdlet pobiera dane licznika wydajności bezpośrednio z instrumentacji monitorowania wydajności w rodzinie systemów operacyjnych Windows. Get-Counter pobiera dane wydajności z komputera lokalnego lub komputerów zdalnych.

Można użyć Get-Counter parametrów, aby określić co najmniej jeden komputer, wyświetlić listę zestawów liczników wydajności i wystąpienia, które zawierają, ustawić przykładowe interwały i określić maksymalną liczbę próbek. Bez parametrów Get-Counter pobiera dane liczników wydajności dla zestawu liczników systemowych.

Wiele zestawów liczników jest chronionych przez listy kontroli dostępu (ACL). Aby wyświetlić wszystkie zestawy liczników, otwórz program PowerShell z opcją Uruchom jako administrator .

To polecenie cmdlet zostało ponownie wprowadzone w programie PowerShell 7.

Uwaga

Nazwy liczników wydajności są zlokalizowane. Przedstawione tutaj przykłady używają angielskich nazw obiektów wydajności, liczników i wystąpień. Nazwy będą inne w systemie, który używa innego języka. Get-Counter -ListSet Użyj polecenia , aby wyświetlić zlokalizowane nazwy.

Przykłady

Przykład 1. Pobieranie listy zestawów liczników

Ten przykład pobiera listę zestawów liczników komputera lokalnego.

Get-Counter -ListSet *

CounterSetName     : Processor
MachineName        : .
CounterSetType     : MultiInstance
Description        : The Processor performance object consists of counters that measure aspects ...
                     computer that performs arithmetic and logical computations, initiates ...
                     computer can have multiple processors.  The processor object represents ...
Paths              : {\Processor(*)\% Processor Time, \Processor(*)\% User Time, ...
PathsWithInstances : {\Processor(0)\% Processor Time, \Processor(1)\% Processor Time, ...
Counter            : {\Processor(*)\% Processor Time, \Processor(*)\% User Time, ...

Get-Counter używa parametru ListSet z gwiazdką (*), aby uzyskać listę zestawów liczników. Kropka (.) w kolumnie MachineName reprezentuje komputer lokalny.

Przykład 2. Określanie przykładówInterval i MaxSamples

Te przykłady pobierają dane licznika dla wszystkich procesorów na komputerze lokalnym. Dane są zbierane w dwóch sekundach, dopóki nie będą dostępne trzy próbki.

Get-Counter -Counter "\Processor(_Total)\% Processor Time" -SampleInterval 2 -MaxSamples 3

Timestamp                 CounterSamples
---------                 --------------
6/18/2019 14:39:56        \\Computer01\processor(_total)\% processor time :
                          20.7144271584086

6/18/2019 14:39:58        \\Computer01\processor(_total)\% processor time :
                          10.4391790575511

6/18/2019 14:40:01        \\Computer01\processor(_total)\% processor time :
                          37.5968799396998

Get-Counter używa parametru Counter , aby określić ścieżkę \Processor(_Total)\% Processor Timelicznika . Parametr SampleInterval ustawia dwusekundowy interwał, aby sprawdzić licznik. MaxSamples określa, że trzy jest maksymalną liczbą prób sprawdzenia licznika.

Przykład 3. Pobieranie ciągłych próbek licznika

Te przykłady pobierają ciągłe próbki dla licznika co sekundę. Aby zatrzymać polecenie, naciśnij klawisze CTRL+C. Aby określić dłuższy interwał między próbkami, użyj parametru SampleInterval .

Get-Counter -Counter "\Processor(_Total)\% Processor Time" -Continuous

Timestamp                 CounterSamples
---------                 --------------
6/19/2019 15:35:03        \\Computer01\processor(_total)\% processor time :
                          43.8522842937022

6/19/2019 15:35:04        \\Computer01\processor(_total)\% processor time :
                          29.7896844697383

6/19/2019 15:35:05        \\Computer01\processor(_total)\% processor time :
                          29.4962645638135

6/19/2019 15:35:06        \\Computer01\processor(_total)\% processor time :
                          25.5901500127408

Get-Counter używa parametru Counter , aby określić \Processor\% Processor Time licznik. Parametr Continuous określa, aby pobrać przykłady co sekundę, dopóki polecenie nie zostanie zatrzymane za pomocą kombinacji klawiszy CTRL+C.

Przykład 4. Alfabetyczna lista zestawów liczników

W tym przykładzie użyto potoku do pobrania zestawu listy liczników, a następnie posortowania listy w kolejności alfabetycznej.

Get-Counter -ListSet * |
  Sort-Object -Property CounterSetName |
    Format-Table CounterSetName, CounterSetType -AutoSize

CounterSetName                        CounterSetType
--------------                        --------------
.NET CLR Data                         SingleInstance
.NET Data Provider for SqlServer      SingleInstance
AppV Client Streamed Data Percentage  SingleInstance
Authorization Manager Applications    SingleInstance
BitLocker                             MultiInstance
Bluetooth Device                      SingleInstance
Cache                                 SingleInstance
Client Side Caching                   SingleInstance

Get-Counter Używa parametru ListSet z gwiazdką (*), aby uzyskać pełną listę zestawów liczników. Obiekty CounterSet są wysyłane w dół potoku. Sort-Object używa parametru Property , aby określić, że obiekty są sortowane według CounterSetName. Obiekty są wysyłane w dół potoku do Format-Tableelementu . Parametr AutoSize dostosowuje szerokość kolumny, aby zminimalizować obcinanie.

Kropka (.) w kolumnie MachineName reprezentuje komputer lokalny.

Przykład 5. Uruchamianie zadania w tle w celu pobrania danych licznika

W tym przykładzie Start-Job uruchamia Get-Counter polecenie jako zadanie w tle na komputerze lokalnym. Aby wyświetlić dane wyjściowe licznika wydajności z zadania, użyj Receive-Job polecenia cmdlet .

Start-Job -ScriptBlock {Get-Counter -Counter "\LogicalDisk(_Total)\% Free Space" -MaxSamples 1000}

Id     Name  PSJobTypeName   State    HasMoreData  Location   Command
--     ----  -------------   -----    -----------  --------   -------
1      Job1  BackgroundJob   Running  True         localhost  Get-Counter -Counter

Start-Job używa parametru ScriptBlock do uruchomienia Get-Counter polecenia. Get-Counter używa parametru Counter , aby określić ścieżkę \LogicalDisk(_Total)\% Free Spacelicznika . Parametr MaxSamples określa, aby pobrać 1000 próbek licznika.

Przykład 6. Pobieranie danych licznika z wielu komputerów

W tym przykładzie użyto zmiennej w celu uzyskania danych licznika wydajności z dwóch komputerów.

$DiskReads = "\LogicalDisk(C:)\Disk Reads/sec"
$DiskReads | Get-Counter -ComputerName Server01, Server02 -MaxSamples 10

Timestamp                 CounterSamples
---------                 --------------
6/21/2019 10:51:04        \\Server01\logicaldisk(c:)\disk reads/sec :
                          0

                          \\Server02\logicaldisk(c:)\disk reads/sec :
                          0.983050344269146

Zmienna $DiskReads przechowuje ścieżkę licznika \LogicalDisk(C:)\Disk Reads/sec . Zmienna $DiskReads jest wysyłana w dół potoku do .Get-Counter Licznik jest pierwszym parametrem pozycji i akceptuje ścieżkę przechowywaną w $DiskReadspliku . Nazwa_komputera określa dwa komputery i MaxSamples określa, aby pobrać 10 przykładów z każdego komputera.

Przykład 7. Pobieranie wartości wystąpienia licznika z wielu losowych komputerów

Ten przykład pobiera wartość licznika wydajności na 50 losowych, zdalnych komputerach w przedsiębiorstwie. Parametr ComputerName używa losowych nazw komputerów przechowywanych w zmiennej. Aby zaktualizować nazwy komputerów w zmiennej, utwórz ponownie zmienną.

Alternatywą dla nazw serwerów w parametrze ComputerName jest użycie pliku tekstowego. Na przykład:

-ComputerName (Get-Random (Get-Content -Path C:\Servers.txt) -Count 50)

Ścieżka licznika zawiera gwiazdkę (*) w nazwie wystąpienia w celu pobrania danych dla każdego procesora komputera zdalnego.

$Servers = Get-Random (Get-Content -Path C:\Servers.txt) -Count 50
$Counter = "\Processor(*)\% Processor Time"
Get-Counter -Counter $Counter -ComputerName $Servers

Timestamp                 CounterSamples
---------                 --------------
6/20/2019 12:20:35        \\Server01\processor(0)\% processor time :
                          6.52610319637854

                          \\Server01\processor(1)\% processor time :
                          3.41030663625782

                          \\Server01\processor(2)\% processor time :
                          9.64189975649925

                          \\Server01\processor(3)\% processor time :
                          1.85240835619747

                          \\Server01\processor(_total)\% processor time :
                          5.35768447160776

Polecenie Get-Random cmdlet używa Get-Content polecenia do wybierania 50 losowych nazw komputerów z Servers.txt pliku. Nazwy komputerów zdalnych są przechowywane w zmiennej $Servers . Ścieżka \Processor(*)\% Processor Time licznika jest przechowywana w zmiennej $Counter . Get-Counter używa parametru Counter , aby określić liczniki w zmiennej $Counter . Parametr ComputerName określa nazwy komputerów w zmiennej $Servers .

Przykład 8. Uzyskiwanie sformatowanych nazw ścieżek za pomocą właściwości Path

W tym przykładzie użyto właściwości Path zestawu liczników w celu znalezienia sformatowanych nazw ścieżek dla liczników wydajności.

Potok jest używany z poleceniem Where-Object cmdlet w celu znalezienia podzestawu nazw ścieżek. Aby znaleźć zestaw liczników pełną listę ścieżek liczników, usuń potok (|) i Where-Object polecenie.

Jest $_ to zmienna automatyczna dla bieżącego obiektu w potoku. Aby uzyskać więcej informacji, zobacz about_Automatic_Variables.

(Get-Counter -ListSet Memory).Paths | Where-Object { $_ -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
\Memory\Long-Term Average Standby Cache Lifetime (s)

Get-Counter używa parametru ListSet , aby określić zestaw liczników pamięci . Polecenie jest ujęte w nawiasy, aby właściwość Path zwracała każdą ścieżkę jako ciąg. Obiekty są wysyłane w dół potoku do Where-Objectelementu . Where-Object używa zmiennej $_ do przetwarzania każdego obiektu i używa -like operatora do znajdowania dopasowań dla ciągu *Cache*. Gwiazdki (*) są symbolami wieloznacznymi dla dowolnych znaków.

Przykład 9. Użyj właściwości PathWithInstances, aby uzyskać nazwy ścieżek sformatowanych

Ten przykład pobiera sformatowane nazwy ścieżek, które zawierają wystąpienia liczników wydajności PhysicalDisk .

(Get-Counter -ListSet PhysicalDisk).PathsWithInstances

\PhysicalDisk(0 C:)\Current Disk Queue Length
\PhysicalDisk(_Total)\Current Disk Queue Length
\PhysicalDisk(0 C:)\% Disk Time
\PhysicalDisk(_Total)\% Disk Time
\PhysicalDisk(0 C:)\Avg. Disk Queue Length
\PhysicalDisk(_Total)\Avg. Disk Queue Length
\PhysicalDisk(0 C:)\% Disk Read Time
\PhysicalDisk(_Total)\% Disk Read Time

Get-Counter używa parametru ListSet , aby określić zestaw liczników PhysicalDisk . Polecenie jest ujęte w nawiasy, aby właściwość PathWithInstances zwracało każde wystąpienie ścieżki jako ciąg.

Przykład 10: Pobieranie pojedynczej wartości dla każdego licznika w zestawie liczników

W tym przykładzie pojedyncza wartość jest zwracana dla każdego licznika wydajności w zestawie licznika pamięci komputera lokalnego.

$MemCounters = (Get-Counter -ListSet Memory).Paths
Get-Counter -Counter $MemCounters

Timestamp                 CounterSamples
---------                 --------------
6/19/2019 12:05:00        \\Computer01\memory\page faults/sec :
                          868.772077545597

                          \\Computer01\memory\available bytes :
                          9031176192

                          \\Computer01\memory\committed bytes :
                          8242982912

                          \\Computer01\memory\commit limit :
                          19603333120

Get-Counter używa parametru ListSet , aby określić zestaw liczników pamięci . Polecenie jest ujęte w nawiasy, aby właściwość Path zwracała każdą ścieżkę jako ciąg. Ścieżki są przechowywane w zmiennej $MemCounters . Get-Counter używa parametru Counter , aby określić ścieżki licznika w zmiennej $MemCounters .

Przykład 11: Wyświetlanie wartości właściwości obiektu

Wartości właściwości w obiekcie PerformanceCounterSample reprezentują poszczególne próbki danych. W tym przykładzie używamy właściwości obiektu CounterSamples do badania, wybierania, sortowania i grupowania danych.

$Counter = "\\Server01\Process(Idle)\% Processor Time"
$Data = Get-Counter $Counter
$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        : 6/19/2019 12:20:49
Timestamp100NSec : 128606207528320000
Status           : 0
DefaultScale     : 0
TimeBase         : 10000000

Ścieżka licznika jest przechowywana w zmiennej $Counter . Get-Counter Pobiera jedną próbkę wartości licznika i przechowuje wyniki w zmiennej $Data . Zmienna $Data używa właściwości CounterSamples , aby uzyskać właściwości obiektu. Obiekt jest wysyłany w dół potoku do Format-List. Parametr Property używa symbolu wieloznakowego gwiazdki (*), aby wybrać wszystkie właściwości.

Przykład 12. Wartości tablicy licznika wydajności

W tym przykładzie zmienna przechowuje każdy licznik wydajności. Właściwość CounterSamples to tablica, która może wyświetlać określone wartości liczników.

Aby wyświetlić każdy przykład licznika, użyj polecenia $Counter.CounterSamples.

$Counter = Get-Counter -Counter "\Processor(*)\% Processor Time"
$Counter.CounterSamples[0]

Path                                         InstanceName        CookedValue
----                                         ------------        -----------
\\Computer01\processor(0)\% processor time   0              1.33997091699662

Get-Counter używa parametru Counter , aby określić licznik \Processor(*)\% Processor Time. Wartości są przechowywane w zmiennej $Counter . $Counter.CounterSamples[0] wyświetla wartość tablicy dla pierwszej wartości licznika.

Przykład 13. Porównanie wartości licznika wydajności

W tym przykładzie znaleziono ilość czasu procesora używanego przez każdy procesor na komputerze lokalnym. Właściwość CounterSamples służy do porównywania danych licznika z określoną wartością.

Aby wyświetlić każdy przykład licznika, użyj polecenia $Counter.CounterSamples.

$Counter = Get-Counter -Counter "\Processor(*)\% Processor Time"
$Counter.CounterSamples | Where-Object { $_.CookedValue -lt "20" }

Path                                         InstanceName        CookedValue
----                                         ------------        -----------
\\Computer01\processor(0)\% processor time   0              12.6398025240208
\\Computer01\processor(1)\% processor time   1              15.7598095767344

Get-Counter używa parametru Counter , aby określić licznik \Processor(*)\% Processor Time. Wartości są przechowywane w zmiennej $Counter . Obiekty przechowywane w obiekcie $Counter.CounterSamples są wysyłane w dół potoku. Where-Object używa bloku skryptu do porównywania każdej wartości obiektów z określoną wartością 20. Jest $_.CookedValue to zmienna dla bieżącego obiektu w potoku. Wyświetlane są liczniki z wartością CookedValue mniejszą niż 20.

Przykład 14. Sortowanie danych licznika wydajności

W tym przykładzie pokazano, jak sortować dane licznika wydajności. W przykładzie znajdują się procesy na komputerze, na których jest używany najwięcej czasu procesora w próbce.

$Procs = Get-Counter -Counter "\Process(*)\% Processor Time"
$Procs.CounterSamples | Sort-Object -Property CookedValue -Descending |
   Format-Table -Property Path, InstanceName, CookedValue -AutoSize

Path                                                         InstanceName             CookedValue
----                                                         ------------             -----------
\\Computer01\process(_total)\% processor time                _total              395.464129650573
\\Computer01\process(idle)\% processor time                  idle                389.356575524695
\\Computer01\process(mssense)\% processor time               mssense             3.05377706293879
\\Computer01\process(csrss#1)\% processor time               csrss               1.52688853146939
\\Computer01\process(microsoftedgecp#10)\% processor time    microsoftedgecp     1.52688853146939
\\Computer01\process(runtimebroker#5)\% processor time       runtimebroker                      0
\\Computer01\process(settingsynchost)\% processor time       settingsynchost                    0
\\Computer01\process(microsoftedgecp#16)\% processor time    microsoftedgecp                    0

Get-Counter używa parametru Counter , aby określić \Process(*)\% Processor Time licznik dla wszystkich procesów na komputerze lokalnym. Wynik jest przechowywany w zmiennej $Procs . Zmienna $Procs z właściwością CounterSamples wysyła obiekty PerformanceCounterSample w dół potoku. Sort-ObjectUżywa parametru Property do sortowania obiektów według CookedValue w kolejności malejącej. Format-Table używa parametru Property , aby wybrać kolumny dla danych wyjściowych. Parametr AutoSize dostosowuje szerokość kolumny, aby zminimalizować obcinanie.

Parametry

-ComputerName

Określa jedną nazwę komputera lub rozdzielaną przecinkami tablicę nazw komputerów zdalnych. Użyj nazwy NetBIOS, adresu IP lub w pełni kwalifikowanej nazwy domeny komputera.

Aby uzyskać dane licznika wydajności z komputera lokalnego, wyklucz parametr ComputerName. W przypadku danych wyjściowych, takich jak ListSet , które zawierają kolumnę MachineName , kropka (.) wskazuje komputer lokalny.

Get-Counter nie polega na komunikacji zdalnej programu PowerShell. Można użyć parametru ComputerName , nawet jeśli komputer nie jest skonfigurowany do uruchamiania poleceń zdalnych.

Type:String[]
Aliases:Cn
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Continuous

Po określeniu parametru Get-Counter Continuous pobiera próbki do momentu naciśnięcia klawisza CTRL+C. Próbki są uzyskiwane co sekundę dla każdego określonego licznika wydajności. Użyj parametru SampleInterval , aby zwiększyć interwał między próbkami ciągłymi.

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Counter

Określa ścieżkę do co najmniej jednej ścieżki licznika. Ścieżki są wprowadzane jako tablica rozdzielona przecinkami, zmienna lub wartości z pliku tekstowego. Ciągi ścieżki licznika można wysyłać w dół potoku do adresu Get-Counter.

Ścieżki liczników używają następującej składni:

\\ComputerName\CounterSet(Instance)\CounterName

\CounterSet(Instance)\CounterName

Na przykład:

\\Server01\Processor(*)\% User Time

\Processor(*)\% User Time

Element \\ComputerName jest opcjonalny w ścieżce licznika wydajności. Jeśli ścieżka licznika nie zawiera nazwy komputera, Get-Counter użyj komputera lokalnego.

Gwiazdka (*) w wystąpieniu to symbol wieloznaczny umożliwiający pobranie wszystkich wystąpień licznika.

Type:String[]
Position:0
Default value:None
Required:False
Accept pipeline input:True
Accept wildcard characters:True

-ListSet

Wyświetla listę zestawów liczników wydajności na komputerach. Użyj gwiazdki (*), aby określić wszystkie zestawy liczników. Wprowadź jedną nazwę lub ciąg rozdzielony przecinkami nazw zestawów liczników. Nazwy zestawów liczników można wysyłać w dół potoku.

Aby uzyskać zestawy liczników sformatowane ścieżki liczników, użyj parametru ListSet . Właściwości Ścieżki i ścieżkiWithInstances każdego zestawu liczników zawierają poszczególne ścieżki liczników sformatowane jako ciąg.

Ciągi ścieżki licznika można zapisać w zmiennej lub użyć potoku, aby wysłać ciąg do innego Get-Counter polecenia.

Na przykład, aby wysłać każdą ścieżkę licznika procesora do :Get-Counter

Get-Counter -ListSet Processor | Get-Counter

Uwaga

W programie PowerShell 7 Get-Counter nie można pobrać właściwości Description zestawu liczników. Opis jest ustawiony na $nullwartość .

Type:String[]
Position:0
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:True

-MaxSamples

Określa liczbę próbek do pobrania z każdego określonego licznika wydajności. Aby uzyskać stały strumień przykładów, użyj parametru Continuous .

Jeśli parametr MaxSamples nie jest określony, Get-Counter pobiera tylko jedną próbkę dla każdego określonego licznika.

Aby zebrać duży zestaw danych, uruchom Get-Counter polecenie jako zadanie w tle programu PowerShell. Aby uzyskać więcej informacji, zobacz opis polecenia about_Jobs.

Type:Int64
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-SampleInterval

Określa liczbę sekund między próbkami dla każdego określonego licznika wydajności. Jeśli parametr SampleInterval nie jest określony, Get-Counter używa interwału jednosekundowego.

Type:Int32
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

Dane wejściowe

String[]

Get-Counter akceptuje dane wejściowe potoku dla ścieżek liczników i nazw zestawów liczników.

Dane wyjściowe

CounterSet

Za pomocą parametru ListSet to polecenie cmdlet zwraca obiekty CounterSet.

PerformanceCounterSampleSet

Domyślnie i przy użyciu parametru Counter to polecenie cmdlet zwraca obiekty PerformanceCounterSampleSet .

Uwagi

Jeśli nie określono żadnych parametrów, Get-Counter pobiera jedną próbkę dla każdego określonego licznika wydajności. Użyj parametrów MaxSamples i Continuous, aby uzyskać więcej przykładów.

Get-Counter używa jednosekundowego interwału między próbkami. Użyj parametru SampleInterval , aby zwiększyć interwał.

Wartości MaxSamples i SampleInterval mają zastosowanie do wszystkich liczników na każdym komputerze w poleceniu . Aby ustawić różne wartości dla różnych liczników, wprowadź oddzielne Get-Counter polecenia.

W programie PowerShell 7 podczas korzystania z parametru Get-Counter ListSet nie można pobrać właściwości Description zestawu liczników. Opis jest ustawiony na $nullwartość .