Udostępnij za pośrednictwem


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 cmdlet Get-Counter 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ć parametrów Get-Counter, 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 licznika 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.

Notatka

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. Użyj polecenia Get-Counter -ListSet, aby wyświetlić zlokalizowane nazwy.

Przykłady

Przykład 1: Pobierz listę zestawu 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śl SampleInterval i MaxSamples

Ten przykład pobiera 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 licznika, aby określić ścieżkę licznika \Processor(_Total)\% Processor Time. Parametr SampleInterval ustawia dwusekundowy interwał sprawdzania licznika. MaxSamples określa, że trzy jest maksymalną liczbą prób sprawdzenia licznika.

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

Ten przykład otrzymuje ciągłe próbki dla licznika co sekundę. Aby zatrzymać polecenie, naciśnij 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 licznika , aby określić licznik \Processor\% Processor Time. Parametr Continuous określa pobieranie próbek co sekundę, dopóki polecenie nie zostanie zatrzymane z CTRL+C.

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

W tym przykładzie używa się potoku do otrzymania zestawu listy liczników, a następnie posortowania tej listy alfabetycznie.

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-Table. 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 polecenie Get-Counter jako zadanie w tle na komputerze lokalnym. Aby wyświetlić dane wyjściowe licznika wydajności z zadania, użyj polecenia cmdlet Receive-Job.

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 polecenia Get-Counter. Get-Counter używa parametru licznika, aby określić ścieżkę licznika \LogicalDisk(_Total)\% Free Space. Parametr MaxSamples określa pobranie 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. Counter jest pierwszym parametrem pozycji i akceptuje ścieżkę przechowywaną w $DiskReads. ComputerName określa dwa komputery i MaxSamples określa pobieranie 10 próbek z każdego komputera.

Przykład 7. Pobieranie wartości wystąpienia licznika z kilku przypadkowo wybranych 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, co umożliwia pobranie 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 cmdlet Get-Random używa Get-Content do wybierania 50 losowych nazw komputerów z pliku Servers.txt. Nazwy komputerów zdalnych są przechowywane w zmiennej $Servers. Ścieżka licznika \Processor(*)\% Processor Time 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 Ścieżka zestawu liczników w celu znalezienia sformatowanych nazw ścieżek dla liczników wydajności.

Polecenie cmdlet Where-Object jest używane w połączeniu z rurociągiem do znalezienia podzestawu nazw ścieżek. Aby znaleźć pełną listę ścieżek liczników, usuń potok (|) i polecenie Where-Object.

$_ jest zmienną automatyczną 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-Object. Where-Object używa $_ zmiennej do przetwarzania każdego obiektu i używa operatora -like 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 uzyskuje sformatowane nazwy ścieżek, które zawierają instancje liczników wydajności dla 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 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 jest zwracana pojedyncza wartość dla każdego licznika wydajności w 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 zapisuje 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 właściwości używa gwiazdki (*) jako symbolu wieloznacznego, 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 jest tablicą, która może wyświetlać konkretne wartości liczników.

Aby wyświetlić każdą próbkę licznika, użyj $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 licznika , 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żdą próbkę licznika, użyj $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 licznika, aby określić licznik \Processor(*)\% Processor Time. Wartości są przechowywane w zmiennej $Counter. Obiekty przechowywane w $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. $_.CookedValue jest zmienną używaną dla bieżącego obiektu w potoku. Wyświetlane są liczniki z CookedValue, które są mniejsze niż 20.

Przykład 14. Sortowanie danych licznika wydajności

W tym przykładzie pokazano, jak sortować dane licznika wydajności. Procesy na komputerze, które wykorzystują najwięcej czasu procesora podczas próbkowania, są odnajdywane w przykładzie.

$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ć licznik \Process(*)\% Processor Time dla wszystkich procesów na komputerze lokalnym. Wynik jest przechowywany w zmiennej $Procs. Obiekty PerformanceCounterSample są wysyłane wzdłuż potoku przez zmienną $Procs z właściwością CounterSamples. Sort-Object używa parametru Właściwości do sortowania obiektów według CookedValue w malejącej kolejności . Format-Table używa parametru właściwości, 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ę zdalnych nazw komputerów. Użyj nazwy NetBIOS, adresu IP lub w pełni kwalifikowanej nazwy domeny komputera.

Aby uzyskać dane licznika wydajności z komputera lokalnego , należy wykluczyć parametr ComputerName. W przypadku danych wyjściowych, takich jak ListSet, która zawiera 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.

Typ:String[]
Aliasy:Cn
Position:Named
Domyślna wartość:None
Wymagane:False
Akceptowanie danych wejściowych potoku:False
Akceptowanie symboli wieloznacznych:False

-Continuous

Po określeniu opcji Continuous, Get-Counter pobiera próbki do momentu naciśnięcia kombinacji klawiszy 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.

Typ:SwitchParameter
Position:Named
Domyślna wartość:None
Wymagane:False
Akceptowanie danych wejściowych potoku:False
Akceptowanie symboli wieloznacznych: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 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

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

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

Typ:String[]
Position:0
Domyślna wartość:None
Wymagane:False
Akceptowanie danych wejściowych potoku:True
Akceptowanie symboli wieloznacznych: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ć zestaw liczników z sformatowanymi ścieżkami, użyj parametru ListSet. Ścieżki i ścieżki WithInstances właściwości każdego zestawu liczników zawierają poszczególne ścieżki liczników sformatowane jako ciąg.

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

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

Get-Counter -ListSet Processor | Get-Counter

Notatka

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

Typ:String[]
Position:0
Domyślna wartość:None
Wymagane:True
Akceptowanie danych wejściowych potoku:True
Akceptowanie symboli wieloznacznych:True

-MaxSamples

Określa liczbę próbek do pobrania z każdego określonego licznika wydajności. Aby uzyskać stały strumień próbek, 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 jako zadanie w tle programu PowerShell. Aby uzyskać więcej informacji, zobacz about_Jobs.

Typ:Int64
Position:Named
Domyślna wartość:None
Wymagane:False
Akceptowanie danych wejściowych potoku:False
Akceptowanie symboli wieloznacznych: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.

Typ:Int32
Position:Named
Domyślna wartość:None
Wymagane:False
Akceptowanie danych wejściowych potoku:False
Akceptowanie symboli wieloznacznych: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

W przypadku parametru ListSet to polecenie cmdlet zwraca obiekty CounterSet.

PerformanceCounterSampleSet

Domyślnie, z parametrem Counter, 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. Aby uzyskać więcej próbek, użyj parametrów MaxSamples i Continuous.

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 ramach polecenia. Aby ustawić różne wartości dla różnych liczników, wprowadź oddzielne polecenia Get-Counter.

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