2016-08-28 63 views
0

新手在這裏,:-)Powershell - 多服務器CPU /內存/ C驅動器統計 - 總計平均

希望你一切順利,伸出援助之手;

我有一個代碼也可以生成多個服務器的CPU/Mem/C驅動器統計,並希望尋求幫助,如果這可能有所有服務器的總平均數?使用下面的腳本,是否有一種方法可以包括獲取我收集的所有服務器(例如10臺服務器)的總平均值?

$ServerListFile = "D:\serverList.txt" 
$ServerList = Get-Content $ServerListFile -ErrorAction SilentlyContinue 
$Result = @() 
ForEach($computername in $ServerList) 
{ 

$AVGProc = Get-WmiObject -computername $computername win32_processor | 
Measure-Object -property LoadPercentage -Average | Select Average 
$OS = gwmi -Class win32_operatingsystem -computername $computername | 
Select-Object @{Name = "MemoryUsage"; Expression = {「{0:N2}」 -f ((($_.TotalVisibleMemorySize - $_.FreePhysicalMemory)*100)/ $_.TotalVisibleMemorySize) }} 
$vol = Get-WmiObject -Class win32_Volume -ComputerName $computername -Filter "DriveLetter = 'C:'" | 
Select-object @{Name = "C PercentFree"; Expression = {「{0:N2}」 -f (($_.FreeSpace/$_.Capacity)*100) } } 

$result += [PSCustomObject] @{ 
ServerName = "$computername" 
CPULoad = "$($AVGProc.Average)%" 
MemLoad = "$($OS.MemoryUsage)%" 
CDrive = "$($vol.'C PercentFree')%" 
} 
$Outputreport = "<HTML><TITLE> Server Health Report </TITLE> 
      <BODY background-color:peachpuff> 
      <font color =""#99000"" face=""Microsoft Tai le""> 
      <H2> Server Health Report </H2></font> 
      <Table border=1 cellpadding=0 cellspacing=0> 
      <TR bgcolor=gray align=center> 
       <TD><B>Server Name</B></TD> 
       <TD><B>Avrg.CPU Utilization</B></TD> 
       <TD><B>Memory Utilization</B></TD> 
       <TD><B>Drive C Free Space</B></TD> 
       </TR>" 

Foreach($Entry in $Result) 

    { 
    if(($Entry.CpuLoad) -or ($Entry.memload) -ge "80") 
    { 
    $Outputreport += "<TR bgcolor=white>" 
    } 
    else 
    { 
    $Outputreport += "<TR>" 
    } 
    $Outputreport += "<TD>$($Entry.Servername)</TD><TD align=center>$($Entry.CPULoad)</TD><TD align=center>$($Entry.MemLoad)</TD><TD align=center>$($Entry.CDrive)</TD></TR>" 
} 
$Outputreport += "</Table></BODY></HTML>" 
} 

$Outputreport | out-file "D:\Result $(Get-Date -Format yyy-mm-dd-hhmm).htm" 

回答

0

既然你已經把所有的$Result陣列中提供的數字,你可以簡單地管它Measure-Object得到的平均值。

問題是,您已將原始數值轉換爲字符串並在百分號%後綴。使用Select-Object轉身取出%所以我們可以再次治療值作爲數字:

$CPUAvg = $Result |Select-Object @{Label='CPU';Expr={$_.CPULoad -replace '%'}} |Measure-Object CPU -Average |Select-Object -Expand Average 
$MemAvg = $Result |Select-Object @{Label='Mem';Expr={$_.MemLoad -replace '%'}} |Measure-Object Mem -Average |Select-Object -Expand Average 
$CDriveAvg = $Result |Select-Object @{Label='CDrive';Expr={$_.CDrive -replace '%'}} |Measure-Object CDrive -Average |Select-Object -Expand Average 

請注意,這種比較:

($Entry.memload) -ge "80" 

會產生意想不到的結果同樣的理由以上。

比較字符串時,"9" -ge "80"將產生$true - 你可能預期不是

+0

喜馬蒂亞斯,感謝您的答覆;不幸的是,我對結果沒有任何價值,我在測試結果中看到的是,將另一行插入到它獲得的每個服務器。它可能在我放置你的代碼的地方;仍然不確定,爲什麼它返回一個空值。 – Gibo

+0

另外,在顯示結果後我能將其轉換回百分比嗎?我應該使用 LoadPercentage -Average 或者只是普通的 「$($ CPUAve)%」 – Gibo