2016-08-28 4 views
0

初心者ここでは、:-)PowerShellの - MulitpleサーバのCPU/Memの/ Cドライブの統計情報 - 平均総

はよくあなたのすべてを願って、いくつかの支援のために手を差し伸べます。

複数のサーバーのCPU/Mem/Cドライブの統計情報を生成できるコードがあります。これがすべてのサーバーの合計平均を持つことができれば助けを求めていますか?下のスクリプトでは、収集したすべてのサーバー(たとえば10台のサーバー)の合計平均を取得する方法がありますか?すでに$Resultアレイ内で使用可能なすべての数字を持っているので

$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

、あなたは平均を得るためにそれ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

関連する問題