我无法弄清楚如何使用列表从系统中记录多个指标。 $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
答案 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"
但是,如果您对此有任何控制权,我会选择原声明。