PowerShell и счетчики производительности

Административные скрипты MS SQL > PowerShell и счетчики производительности
18.08.2016 14:12:18



Статья:

Начнем с простого. Вводим

GetCounter

Смотрим что получается. Получается вывод сэмплов для сетевого интерфейса, процессора, памяти и физического диска.
Негусто ??
Тогда вводим

GetCounter ListSet *

Через пару экранов жмем Ctrl+C и пишем более конкретное

GetCounter ListSet *disk

Лучше, но все еще неясно что дальше?

GetCounter ListSet *disk | Sort-Object CounterSetName | Select-Object CounterSetName

Теперь запрашиваем конкретный набор

GetCounter ListSet ‘ LogicalDisk’

и получаем список доступных для этого набора счетчиков.

GetCounter ListSet ‘PhysicalDisk’ | Select-Object -ExpandProperty Counter

Для полноты картинки вводим еще

GetCounter ListSet LogicalDisk | Select-Object -ExpandProperty PathsWithInstances

Что дальше?
Вводим

GetCounter ListSet ‘PhysicalDisk’ | Select-Object -ExpandProperty Counter | Out-FileC:\TEMP\Sample.txt

Полученный список счетчиков выгружается в файл «C:\TEMP\Sample.txt».
Что бы все это хозяйство заработало, нам понадобится создать CSV-файл

GetCounter ListSet ‘LogicalDisk’, ‘PhysicalDisk’ |
ForEach-Object {
$CounterCategory = $_
$CounterCategory | Select-Object -ExpandProperty Counter |
ForEach-Object {
$CounterName = $_
$CounterName | Where-Object {$CounterName -match ‘(sec/Transfer|Avg. Disk Queue Length)’} |
Select-Object @{E={$CounterCategory.CounterSetName};N="CounterSetName"},
@{E={$CounterCategory.Description};N="Description"},
@{E={$CounterName};N="Counter"}
}
} |
Export-csv C:\temp\BaselineCounters.csv -NoClobber -NoTypeInformation -Append

Файл сформирован, смотрим что получилось

$Counters = (Import-Csv C:\temp\BaselineCounters.csv).counter
GetCounter Counter $Counters

Для упрощения восприятия немного причесываем вывод

$Counters = (Import-Csv C:\temp\BaselineCounters.csv).counter
GetCounter Counter $Counters |
Select-Object -ExpandProperty countersamples |
Select-Object @{E={$_.timestamp};N="Date"},
@{E={$_.path};N="Counter"},
InstanceName,
@{E={$_.cookedvalue};N="Value"}

Что бы получить заданные счетчики сразу с нескольких хостов добавляем в код

$Computers = Get-Content c:\temp\Servers.txt
# и модифицируем строку
GetCounter -ComputerName $Computers Counter $Counters

Дальше, что называется «по вкусу», добавляем количество запросов

GetCounter Counter $Counters SampleInterval 2 MaxSamples 10

Выгружаем информацию в файл

$Counters = (Import-Csv C:\temp\BaselineCounters.csv).counter
GetCounter Counter $Counters SampleInterval 2 MaxSamples 10 | Exportcounter -PathC:\TEMP\data1.blg