Powershell - 多个服务器CPU / Mem / C驱动器统计数据 - 总平均值

时间:2016-08-28 02:21:54

标签: powershell

新手在这里,: - )

希望你们一切顺利,并寻求一些帮助;

我还有一个代码,它可以为多个服务器生成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"

1 个答案:

答案 0 :(得分: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 - 可能不是您的预期