转换计数器数据

时间:2016-10-25 08:26:12

标签: powershell performancecounter

我有以下脚本:

$SqlServerCounterPrefix = '\MSSQL$MSSQL_2008'
$Data = get-counter ($SqlServerCounterPrefix + ":Buffer Manager\Buffer cache hit ratio"), 
                    ($SqlServerCounterPrefix + ":Buffer Manager\Page life expectancy"), 
                    ($SqlServerCounterPrefix + ":Access Methods\Page splits/sec")
#$Data
$TransformedData = $Data.CounterSamples | Select-Object -Property Path, CookedValue
$TransformedData | Add-Member -NotePropertyName 'Timestamp' -NotePropertyValue $Data.Timestamp
$TransformedData | Format-table -auto

这导致以下结果:

Path                                                                 CookedValue Timestamp          
----                                                                 ----------- ---------          
\\sw-pa-win10\mssql$mssql_2008:buffer manager\buffer cache hit ratio         100 2016-10-25 10:18:19
\\sw-pa-win10\mssql$mssql_2008:buffer manager\page life expectancy           123 2016-10-25 10:18:19
\\sw-pa-win10\mssql$mssql_2008:access methods\page splits/sec                  0 2016-10-25 10:18:19

我如何将其转变为以下内容:

Timestamp              buffer cache hit ratio    page life expectancy    page splits/sec
---------              ----------------------    --------------------    ---------------
2016-10-25 10:18:19    100                       123                     0

注意:我对powershell不好,所以如果您对改进原始脚本有任何建议,欢迎大家提出意见!

1 个答案:

答案 0 :(得分:0)

我设法找到了解决方案:

$SqlServerCounterPrefix = '\MSSQL$MSSQL_2008'
$Data = get-counter ($SqlServerCounterPrefix + ":Buffer Manager\Buffer cache hit ratio"), 
                    ($SqlServerCounterPrefix + ":Buffer Manager\Page life expectancy"), 
                    ($SqlServerCounterPrefix + ":Access Methods\Page splits/sec")
$TransformedData = $Data.CounterSamples | Select-Object -Property Path, CookedValue

$object = New-Object psobject

$object | Add-Member -NotePropertyName 'Timestamp' -NotePropertyValue $Data.Timestamp
foreach ($row in $TransformedData)
{
    $path = $row.Path
    $name = $path.Substring($path.LastIndexOf("\") + 1)
    $object | Add-Member -NotePropertyName $name -NotePropertyValue $row.CookedValue
}
$object