Skip to content

Instantly share code, notes, and snippets.

@skokhanovskiy
Created July 28, 2017 14:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save skokhanovskiy/61566322cb57b7c6a30b8a15179dcf25 to your computer and use it in GitHub Desktop.
Save skokhanovskiy/61566322cb57b7c6a30b8a15179dcf25 to your computer and use it in GitHub Desktop.
function New-PerfomanceCounterHash
{
[CmdletBinding()]
param
(
[Parameter()]
[Switch] $NotLocalized
)
$KeyName = 'Counter'
$RegistryPathLeafLocalMapping = @{
$true = '009'
$false = 'CurrentLanguage'
}
$RegistryPath = 'Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib'
$RegistryPath = Join-Path -Path $RegistryPath -ChildPath $RegistryPathLeafLocalMapping[$NotLocalized.IsPresent]
$CounterLines = Get-ItemProperty -Path $RegistryPath -Name $KeyName | Select-Object -ExpandProperty $KeyName
$Count = $CounterLines.Count
$Hash = @{}
for ($I = 0; $I -lt $Count - 1; $I += 2)
{
$Name = $CounterLines[$I + 1]
$Id = [Int] $CounterLines[$I]
if (-not $Hash.ContainsKey($Name))
{
$Hash.Add($Name, [System.Collections.ArrayList] @($Id))
}
else
{
[Void] $Hash[$Name].Add($Id)
}
$Hash.Add($Id, $Name)
}
return $Hash
}
@skokhanovskiy
Copy link
Author

skokhanovskiy commented Aug 4, 2017

Name

New-PerfomanceCounterHash

Synopsis

Создает хеш-таблицу для преобразования имен счетчиков производительности Windows в целочисленные идентификаторы и наоборот.

Syntax

New-PerfomanceCounterHash [-NotLocalized]  [<CommonParameters>]

Description

Функция New-PerfomanceCounterHash создает хеш-таблицу для преобразования имен счетчиков производительности Windows в целочисленные идентификаторы и наоборот. Результирующая таблица содержит в себе два вида ключей:

  • строковые ключи для получения идентификатора счетчика по его имени;
  • целочисленные ключи для получения имени счетчика по его идентификатору.

Строковые ключи в качестве значения хранят массив идентификаторов (System.Collections.ArrayList), т.к. одному и тому же имени счетчика могут соответствовать разные идентификаторы.

Результирующая хеш-таблица может быть использована для получения идентификаторов, которые можно использовать в элементах данных Zabbix. Результат функции также можно использовать для перевода имен счетчиков производительности с английского языка на тот язык, который используется в вашей версии Windows.

Parameters

NotLocalized

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

Examples

Example 1

$Hash = New-PerfomanceCounterHash
$Hash['Pages/sec']

Выведет список идентификаторов для счетчика производительности "Pages/sec".

Example 2

$Hash = New-PerfomanceCounterHash
$Hash[4]

Выведет имя счетчика производительности с идентификатором 4 с учетом языка, используемого в системе Windows.

Example 3

$Hash = New-PerfomanceCounterHash -NotLocalized
$Hash[238]

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

Example 4

$Local = New-PerfomanceCounterHash
$NotLocal = New-PerfomanceCounterHash -NotLocalized
$Local[$NotLocal['Memory'][0]]

Выведет имя счетчика производительности "Memory" с учетом языка, используемого в системе Windows.

Example 5

$Local = New-PerfomanceCounterHash
$NotLocal = New-PerfomanceCounterHash -NotLocalized
$NotLocal[$Local['Память'][0]]

Выведет имя счетчика производительности "Память" на английском языке, т.е. без учета языка, используемого в системе Windows.

Example 6

$Local = New-PerfomanceCounterHash
$NotLocal = New-PerfomanceCounterHash -NotLocalized
$CounterName = '\Memory\Demand Zero Faults/sec'
'\{0}\{1}' -f ($Local[$NotLocal[($CounterName -split '\\')[-2]][0]], $Local[$NotLocal[($CounterName -split '\\')[-1]][0]])

Выведет полное имя счетчика производительности "\Memory\Demand Zero Faults/sec" с учетом языка, используемого в системе Windows. Например, для русского языка результат будет "\Память\Ошибок запроса обнуления/с".

@skokhanovskiy
Copy link
Author

Name

New-PerfomanceCounterHash

Synopsis

Creates a hash table to convert Windows performance counter names to integer IDs and vice versa.

Syntax

New-PerfomanceCounterHash [-NotLocalized] [<CommonParameters>]

Description

The New-PerfamanceCounterHash function creates a hash table for converting names of the Windows performance counters to integer identifiers and vice versa. The resulting table contains two types of keys:

  • String keys to get the counter identifier by its name;
  • Integer keys to get the conter name its identifier.
    Value of the string keys is an array of identifiers (System.Collections.ArrayList), because different identifiers may correspond to the same counter name.

The resulting hash table can be used to obtain identifiers that can be used in Zabbix items. The result of the function can also be used to translate the performance counter names from English to the current Windows language locale.

Parameters

NotLocalized

Enables using non-localized performance counter names.

Examples

Example 1

$Hash = New-PerfomanceCounterHash
$Hash['Pages/sec']

Show the list of IDs of the "Pages/sec" performance counter.

Example 2

$Hash = New-PerfomanceCounterHash
$Hash[4]

Show the localized name of the performance counter with ID 4.

Example 3

$Hash = New-PerfomanceCounterHash -NotLocalized
$Hash[238]

Show the nonlocalized name of the performance counter with ID 238.

Example 4

$Local = New-PerfomanceCounterHash
$NotLocal = New-PerfomanceCounterHash -NotLocalized
$Local[$NotLocal['Memory'][0]]

Show the localized name of the performance counter "Memory".

Example 5

$Local = New-PerfomanceCounterHash
$NotLocal = New-PerfomanceCounterHash -NotLocalized
$NotLocal[$Local['Память'][0]]

Show the nonlocalized name of the performance counter "Память".

Example 6

$Local = New-PerfomanceCounterHash
$NotLocal = New-PerfomanceCounterHash -NotLocalized
$CounterName = '\Memory\Demand Zero Faults/sec'
'\{0}\{1}' -f ($Local[$NotLocal[($CounterName -split '\\')[-2]][0]], $Local[$NotLocal[($CounterName -split '\\')[-1]][0]])

Show the localized full name of the performance counter "\Memory\Demand Zero Faults/sec". For example, for the Russian locale the result will be "\Память\Ошибок запроса обнуления/с".

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment