2016-08-28 1 views
0

hier Newbie :-)Powershell - Mulitple Server CPU/Mem/C-Laufwerk Statistik - Gesamt Durchschnitt

Hoffe, dass Sie alle gut und für etwas Unterstützung zu erreichen;

Ich habe auch einen Code, der CPU/Mem/C Drive Statistiken für mehrere Server generieren kann, und hoffte, um Hilfe zu bitten, wenn dies einen Gesamtdurchschnitt aller Server haben könnte? Mit dem unten stehenden Skript gibt es eine Möglichkeit, den Gesamtdurchschnitt aller Server zu erfassen, die ich gesammelt habe (z. B. 10 Server).

$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" 

Antwort

0

Da Sie bereits alle Zahlen im $Result Array zur Verfügung haben, können Sie einfach eine Pipe an Measure-Object den Mittelwert zu erhalten.

Das Problem ist, dass Sie die ursprünglichen numerischen Werte in Zeichenfolgen umgewandelt und das Prozentzeichen % postfixed haben. Verwenden Sie Select-Object abbiegen entfernen die % so können wir die Werte als Zahlen behandeln wieder:

$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 

Bitte beachten Sie, dass dieser Vergleich:

($Entry.memload) -ge "80" 

unerwartete Ergebnisse aus dem gleichen Grund ergeben wird erwähnt über.

Wenn Strings zu vergleichen, "9" -ge "80" wird $true ergeben - wahrscheinlich nicht, was Sie

+0

Hallo Mathias erwartet, Vielen Dank für Ihre Antwort; Leider bekomme ich keinen Wert auf das Ergebnis, und was ich auf dem Testergebnis sehe, ist das Einfügen einer weiteren Zeile in jeden Server, den es bekommt. Es kann wahrscheinlich sein, wo ich Ihren Code platzieren; immer noch unsicher, warum es einen leeren Wert zurückgibt. – Gibo

+0

Kann ich es bei der Anzeige des Ergebnisses auch zurück in Prozent konvertieren? sollte ich verwenden LoadPercentage -Verbrauch oder einfach nur "$ ($ CPUAve)%" – Gibo