如何一次使用Get-Counter返回多个性能计数器?

时间:2017-04-04 16:13:18

标签: windows performance powershell

我无法弄清楚如何使用列表从系统中记录多个指标。 $CounterList var不起作用,但$CounterList_Working var起作用。我见过基于(Get-Counter -List Processor(*)).Paths等路径获取列表的示例。

我以为我可以在变量中指定路径,但这不起作用。

PowerShell脚本中的$CounterList有什么问题?我得到的错误消息是“Get-Counter:在计算机上找不到指定的对象。”。这让我觉得它试图将列表作为单个值读取。

$CounterList = "\Network Interface(*)\Packets/sec
\Network Interface(*)\Current Bandwidth
\Network Interface(*)\Bytes Total/sec
\Memory\Committed Bytes
\Memory\Commit Limit"

$CounterList_Working = "\Processor(*)\% Processor Time"

echo "Gathering system data and writing to file $home\system_metrics.blg"
Get-Counter -Counter $CounterList -SampleInterval 2 -MaxSamples 10 | Export-counter -Path $home\system_metrics.blg

1 个答案:

答案 0 :(得分:4)

根据MSDN for Get-Counter,参数......

  

<强> -Counter

     

指定来自指定性能计数器的数据作为字符串 array 。输入一个或多个计数器路径。您还可以将计数器路径字符串传递给此cmdlet。

您正在使用单个字符串,这对单个计数器来说没问题。您需要一个数组作为多个计数器的列表。

$CounterList = "\Network Interface(*)\Packets/sec",
    "\Network Interface(*)\Current Bandwidth",
    "\Network Interface(*)\Bytes Total/sec",
    "\Memory\Committed Bytes",
    "\Memory\Commit Limit"

应该像许多其他方式一样声明字符串数组。

如果由于某种疯狂的原因你真的使用换行符分隔的字符串,你可以将其转换为带有-split的字符串数组。以下内容将为您提供与我的第一个示例相同的结果。

$CounterList = "\Network Interface(*)\Packets/sec
    \Network Interface(*)\Current Bandwidth
    \Network Interface(*)\Bytes Total/sec
    \Memory\Committed Bytes
    \Memory\Commit Limit" -split "`r`n"

但是,如果您对此有任何控制权,我会选择原声明。