2017-04-04 23 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