2017-04-04 68 views
2

我不知道如何使用列表从系统记录多个指标。 $CounterList var不起作用,但$CounterList_Working var起作用。我看到了一些基于路径的列表,例如(Get-Counter -List Processor(*)).Paths如何一次返回多个性能计数器与Get-Counter?

我以为我可以在一个变量指定的路径,但不起作用。

什么是错的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

您的'$ CounterList'只是一个字符串,而不是一个字符串数组。与'$ arr ='str1','str2','str3''比较 - 有很多方法可以正确地声明一个数组,你可能想看看。 – wOxxOm

回答

3

Accoring到MSDN for Get-Counter,参数...

-Counter

指定,作为字符串阵列,从指定的性能计数器的数据。输入一个或多个计数器路径。您还可以将计数器路径字符串传递给此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" 

但是,如果你有任何控制权,我会选择前声明。

+0

谢谢,那正是我所缺少的。 – LF4