Назад | Перейти на главную страницу

Использование Powershell для получения группы конкретных счетчиков perfmon

Я пытаюсь настроить сценарий, который генерирует файлы blg каждый установленный промежуток времени, используя PowerShell. Я знаю, что это можно сделать с помощью XML-шаблонов perfmon, но для этого конкретного проекта я должен сделать это с помощью PowerShell, если это вообще возможно.

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

Я попытался использовать следующий сценарий для создания списка используемых счетчиков производительности:

$Counters = @()
$Counters += '\Memory\Available Bytes' 
$counters += '\Paging File(*)\% Usage'
$Counters += '\PhysicalDisk(*)\Disk Reads/sec'
$Counters += '\PhysicalDisk(*)\Disk Writes/sec'
$Counters += '\PhysicalDisk(*)\Avg. Disk sec/Read'
$Counters += '\PhysicalDisk(*)\Avg. Disk sec/Write'
$Counters += '\Processor(*)\% Processor Time'
$Counters += '\System\Processor Queue Length'
foreach($counter in $Counters)
{
$string = $string + ", '" + $counter + "'" 
$string = $string.TrimStart(",")
}

если я затем перейду к использованию get-counter $ string, я получу следующую ошибку:

Get-Counter : The specified counter path could not be interpreted.

Но когда я копирую точное значение строки и использую get-counter -counter Значения $ string работает нормально ...

Может ли кто-нибудь посоветовать мне, как получить приемник работать либо с массивом, либо со строкой со списком счетчиков?

Когда я использую твой += блок, я возвращаюсь $counters это длинная сцепленная строка.

$counters += '\Memory\Available Bytes'
$counters += '\Paging File(*)\% Usage'
$counters += '\PhysicalDisk(*)\Disk Reads/sec'
$counters += '\PhysicalDisk(*)\Disk Writes/sec'
$counters += '\PhysicalDisk(*)\Avg. Disk sec/Read'
$counters += '\PhysicalDisk(*)\Avg. Disk sec/Write'
$counters += '\Processor(*)\% Processor Time'
$counters += '\System\Processor Queue Length'
$counters

\Memory\Available Bytes\Paging File(*)\% Usage\PhysicalDisk(*)\Disk Reads/sec\PhysicalDisk(*)\Disk Writes/sec\PhysicalDisk(*)\Avg. Disk sec/Read\PhysicalDisk(*)\Avg. Disk sec/Write\Processor(*)\% Processor Time\System\Processor Queue Length

$counters.GetType()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     String                                   System.Object

Вероятно, это не то, что вам нужно. Если вы сделаете $counters с массивом явно все работает немного лучше.

$counters = @()
$counters += '\Memory\Available Bytes' 
$counters += '\Paging File(*)\% Usage'
$counters += '\PhysicalDisk(*)\Disk Reads/sec'
$counters += '\PhysicalDisk(*)\Disk Writes/sec'
$counters += '\PhysicalDisk(*)\Avg. Disk sec/Read'
$counters += '\PhysicalDisk(*)\Avg. Disk sec/Write'
$counters += '\Processor(*)\% Processor Time'
$counters += '\System\Processor Queue Length'
$counters.GetType()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     Object[]                                 System.Array

$counters | Get-Counter