Я пытаюсь настроить сценарий, который генерирует файлы 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