Поделиться через


Get-Counter

Получает данные счетчиков производительности с локальных и удаленных компьютеров.

Синтаксис

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

Описание

Этот командлет доступен только на платформе Windows.

Командлет Get-Counter получает данные счетчика производительности непосредственно из инструментирования мониторинга производительности в семействе операционных систем Windows. Get-Counter получает данные о производительности с локального компьютера или удаленных компьютеров.

Параметры можно использовать Get-Counter для указания одного или нескольких компьютеров, перечисления наборов счетчиков производительности и содержащихся в них экземпляров, задания интервалов выборки и указания максимального количества выборок. Без параметров Get-Counter получает данные счетчика производительности для набора системных счетчиков.

Многие наборы счетчиков защищены списками управления доступом (ACL). Чтобы просмотреть все наборы счетчиков, откройте PowerShell с параметром "Запуск от имени администратора ".

Этот командлет был повторно введен в PowerShell 7.

Примечание.

Имена счетчиков производительности локализованы. В примерах, показанных здесь, используются английские имена объектов производительности, счетчиков и экземпляров. Имена будут отличаться в системе, которая использует другой язык. Get-Counter -ListSet Используйте команду, чтобы просмотреть локализованные имена.

Примеры

Пример 1. Получение списка наборов счетчиков

В этом примере возвращается список наборов счетчиков локального компьютера.

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использует параметр ListSet со звездочкой (*) для получения списка наборов счетчиков. Точка (.) в столбце MachineName представляет локальный компьютер.

Пример 2. Указание sampleInterval и MaxSamples

В этом примере возвращаются данные счетчика для всех процессоров на локальном компьютере. Данные собираются по двум секундам, пока не будет три примера.

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использует параметр Counter для указания пути \Processor(_Total)\% Processor Timeсчетчика. Параметр SampleInterval задает двухсекундный интервал для проверка счетчика. MaxSamples определяет, что три — максимальное количество раз, проверка счетчика.

Пример 3. Получение непрерывных выборок счетчика

Эти примеры получают непрерывные образцы для счетчика каждую секунду. Чтобы остановить выполнение команды, нажмите клавиши CTRL+C. Чтобы указать более длинный интервал между примерами, используйте параметр 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использует параметр Counter для указания счетчика\Processor\% Processor Time. Непрерывныйпараметр указывает, чтобы получить примеры каждую секунду, пока команда не будет остановлена с помощью CTRL+C.

Пример 4. Алфавитный список наборов счетчиков

В этом примере конвейер используется для получения набора списков счетчиков, а затем сортировки списка в алфавитном порядке.

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использует параметр ListSet со звездочкой (*) для получения полного списка наборов счетчиков. Объекты CounterSet отправляются по конвейеру. Sort-Objectиспользует параметр Property, чтобы указать, что объекты отсортированы по CounterSetName. Объекты отправляются вниз конвейера Format-Table. Параметр AutoSize настраивает ширину столбца, чтобы свести к минимуму усечение.

Точка (.) в столбце MachineName представляет локальный компьютер.

Пример 5. Запуск фонового задания для получения данных счетчика

В этом примере Start-Job выполняется Get-Counter команда в качестве фонового задания на локальном компьютере. Чтобы просмотреть выходные данные счетчика производительности из задания, используйте 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использует параметр ScriptBlock для выполнения Get-Counter команды. Get-Counterиспользует параметр Counter для указания пути \LogicalDisk(_Total)\% Free Spaceсчетчика. Параметр MaxSamples указывает, чтобы получить 1000 примеров счетчика.

Пример 6. Получение данных счетчика с нескольких компьютеров

В этом примере используется переменная для получения данных счетчика производительности с двух компьютеров.

$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

Переменная $DiskReads сохраняет путь счетчика \LogicalDisk(C:)\Disk Reads/sec . Переменная $DiskReads отправляется вниз конвейера Get-Counter. Счетчик является первым параметром позиции и принимает путь, хранящийся в $DiskReads. ComputerName указывает два компьютера и MaxSamples , чтобы получить 10 примеров с каждого компьютера.

Пример 7. Получение значений экземпляра счетчика с нескольких случайных компьютеров

В этом примере возвращается значение счетчика производительности на 50 случайных удаленных компьютерах в организации. Параметр ComputerName использует случайные имена компьютеров, хранящиеся в переменной. Чтобы обновить имена компьютеров в переменной, создайте переменную.

Альтернативой именам серверов в параметре ComputerName является использование текстового файла. Например:

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

Путь счетчика содержит звездочку (*) в имени экземпляра, чтобы получить данные для каждого процессора удаленного компьютера.

$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

Командлет Get-Random использует для Get-Content выбора из файла 50 случайных имен компьютеров Servers.txt . Имена удаленных компьютеров хранятся в переменной $Servers . \Processor(*)\% Processor Time Путь счетчика хранится в переменной$Counter. Get-Counterиспользует параметр Counter для указания счетчиков в переменной$Counter. Параметр ComputerName указывает имена компьютеров в переменной $Servers .

Пример 8. Использование свойства Path для получения отформатированных имен путей

В этом примере свойство Path счетчика используется для поиска отформатированных имен путей для счетчиков производительности.

Конвейер используется с Where-Object командлетом для поиска подмножества имен путей. Чтобы найти полный список путей счетчика, удалите конвейер (|) и Where-Object команду.

Это $_ автоматическая переменная для текущего объекта в конвейере. Дополнительные сведения см. в статье 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использует параметр ListSet для указания набора счетчиков памяти. Команда заключена в скобки, чтобы свойство Paths возвращал каждый путь в виде строки. Объекты отправляются вниз конвейера Where-Object. Where-Object использует переменную $_ для обработки каждого объекта и использует -like оператор для поиска совпадений для строки *Cache*. Звездочки (*) дикие карта для любых символов.

Пример 9. Использование свойства PathsWithInstances для получения отформатированных имен путей

В этом примере возвращаются отформатированные имена путей, которые включают экземпляры счетчиков производительности 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использует параметр ListSet для указания набора счетчиков PhysicalDisk. Команда заключена в скобки, чтобы свойство PathsWithInstances возвращал каждый экземпляр пути в виде строки.

Пример 10. Получение одного значения для каждого счетчика в наборе счетчиков

В этом примере возвращается одно значение для каждого счетчика производительности в наборе счетчиков памяти локального компьютера.

$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использует параметр ListSet для указания набора счетчиков памяти. Команда заключена в скобки, чтобы свойство Paths возвращал каждый путь в виде строки. Пути хранятся в переменной $MemCounters . Get-Counterиспользует параметр Counter для указания путей счетчика в переменной$MemCounters.

Пример 11. Отображение значений свойств объекта

Значения свойств в объекте PerformanceCounterSample представляют каждый пример данных. В этом примере мы используем свойства объекта CounterSamples для проверки, выбора, сортировки и группировки данных.

$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

Путь счетчика хранится в переменной $Counter . Get-Counter получает один пример значений счетчика и сохраняет результаты в переменной $Data . Переменная $Data использует свойство CounterSamples для получения свойств объекта. Объект отправляется вниз конвейера Format-List. Параметр Property использует звездочку (*) дикую карта для выбора всех свойств.

Пример 12. Значения массива счетчиков производительности

В этом примере переменная сохраняет каждый счетчик производительности. Свойство CounterSamples — это массив, который может отображать определенные значения счетчиков.

Чтобы отобразить каждый пример счетчика, используйте $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использует параметр Counter для указания счетчика\Processor(*)\% Processor Time. Значения хранятся в переменной $Counter . $Counter.CounterSamples[0] отображает значение массива для первого значения счетчика.

Пример 13. Сравнение значений счетчика производительности

В этом примере находится время процессора, используемое каждым процессором на локальном компьютере. Свойство CounterSamples используется для сравнения данных счетчика с указанным значением.

Чтобы отобразить каждый пример счетчика, используйте $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использует параметр Counter для указания счетчика\Processor(*)\% Processor Time. Значения хранятся в переменной $Counter . Объекты, хранящиеся в $Counter.CounterSamples конвейере, отправляются вниз. Where-Object использует блок скрипта для сравнения каждого значения объектов с указанным значением 20. Переменная $_.CookedValue для текущего объекта в конвейере. Отображаются счетчики с cookedValue меньше 20.

Пример 14. Сортировка данных счетчика производительности

В этом примере показано, как сортировать данные счетчика производительности. В примере обнаруживаются процессы на компьютере, использующего наибольшее время процессора во время примера.

$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использует параметр Counter для указания \Process(*)\% Processor Time счетчика для всех процессов на локальном компьютере. Результат хранится в переменной $Procs. Переменная $Procs с свойством CounterSamples отправляет объекты PerformanceCounterSample вниз конвейера. Sort-Objectиспользует параметр Property для сортировки объектов по CookedValue в порядке убывания. Format-Tableиспользует параметр Property для выбора столбцов выходных данных. Параметр AutoSize настраивает ширину столбца, чтобы свести к минимуму усечение.

Параметры

-ComputerName

Указывает одно имя компьютера или разделенный запятыми массив имен удаленных компьютеров. Используйте имя NetBIOS, IP-адрес или полное доменное имя компьютера.

Чтобы получить данные счетчика производительности с локального компьютера, исключите параметр ComputerName. Для выходных данных, таких как ListSet , содержащий столбец MachineName , точка (.) указывает локальный компьютер.

Get-Counter не зависит от удаленного взаимодействия PowerShell. Параметр ComputerName можно использовать, даже если компьютер не настроен для выполнения удаленных команд.

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

-Continuous

Если задан непрерывный, возвращает примеры, Get-Counter пока не нажимаете клавиши CTRL+C. Примеры получаются каждые секунды для каждого указанного счетчика производительности. Используйте параметр SampleInterval, чтобы увеличить интервал между непрерывными выборками.

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

-Counter

Указывает путь к одному или нескольким путям счетчика. Пути — это входной массив, разделенный запятыми, переменная или значения из текстового файла. Строки пути счетчика можно отправлять в конвейер Get-Counter.

Пути счетчика используют следующий синтаксис:

\\ComputerName\CounterSet(Instance)\CounterName

\CounterSet(Instance)\CounterName

Например:

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

\Processor(*)\% User Time

Необязательный \\ComputerName в пути счетчика производительности. Если путь счетчика не содержит имя компьютера, Get-Counter использует локальный компьютер.

Звездочка (*) в экземпляре является диким карта символом, чтобы получить все экземпляры счетчика.

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

-ListSet

Выводит наборы счетчиков производительности на компьютерах. Используйте звездочку (*) для указания всех наборов счетчиков. Введите одно имя или строку, разделенную запятыми, имена наборов счетчиков. Вы можете отправлять имена наборов счетчиков вниз конвейера.

Чтобы получить отформатированные пути счетчика, используйте параметр ListSet . Свойства Paths и PathsWithInstances каждого набора счетчиков содержат отдельные пути счетчика, отформатированные в виде строки.

Строки пути счетчика можно сохранить в переменной или использовать конвейер для отправки строки в другую Get-Counter команду.

Например, чтобы отправить каждый путь счетчика процессора в Get-Counter:

Get-Counter -ListSet Processor | Get-Counter

Примечание.

В PowerShell 7 Get-Counter не удается получить свойство Description набора счетчиков. Для параметра Description задано $nullзначение .

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

-MaxSamples

Указывает количество примеров, полученных из каждого указанного счетчика производительности. Чтобы получить постоянный поток примеров, используйте непрерывный параметр.

Если параметр MaxSamples не указан, Get-Counter получает только один пример для каждого указанного счетчика.

Чтобы собрать большой набор данных, выполните Get-Counter фоновое задание PowerShell. См. дополнительные сведения о заданиях.

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

-SampleInterval

Указывает количество секунд между выборками для каждого указанного счетчика производительности. Если параметр SampleInterval не указан, Get-Counter используется один секундный интервал.

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

Входные данные

String[]

Get-Counter принимает входные данные конвейера для путей счетчика и имен наборов счетчиков.

Выходные данные

CounterSet

С параметром ListSet этот командлет возвращает объекты CounterSet.

PerformanceCounterSampleSet

По умолчанию и с параметром Счетчика этот командлет возвращает объекты PerformanceCounterSampleSet .

Примечания

Если параметры не указаны, Get-Counter возвращает один пример для каждого указанного счетчика производительности. Используйте maxSamples и непрерывные параметры, чтобы получить дополнительные примеры.

Get-Counter использует один секундный интервал между примерами. Используйте параметр SampleInterval для увеличения интервала.

Значения MaxSamples и SampleInterval применяются ко всем счетчикам на каждом компьютере команды. Чтобы задать разные значения для разных счетчиков, введите отдельные Get-Counter команды.

В PowerShell 7 при использовании параметра ListSet не удается получить свойство DescriptionGet-Counter набора счетчиков. Для параметра Description задано $nullзначение .