2016-10-27 10 views
-1

私は以下のPowershellスクリプトを使用して、複数のリモートVMの稼働時間/ディスク容量/メモリ使用量を照会します。一緒に束ねられ、残りのサーバーをこのスクリプトに追加すると(約30/40の追加が追加されます)、データは読み込み不能になり始めます。PowershellからHTMLへ - 各サーバーのディスクスペース情報間に改行/改行を追加できません

[CmdLetBinding()] 
Param ([Parameter(Mandatory=$false,Position=1)][string]$path = "C:\LON3 Web Server Report - $(get-date -f dd_MM_yyyy).html", 
     [Parameter(Mandatory=$false,Position=2)][array]$servers = @("Svr1","Svr2","Svr3") 
) 

Function Get-UpTime 
{ Param ([string[]]$servers) 
    Foreach ($s in $servers) 
    { 
    $os = Get-WmiObject -class win32_OperatingSystem -cn $s 
    New-Object psobject -Property @{ 
     Uptime = ((get-date) - $os.converttodatetime($os.lastbootuptime)).Days 
     Hostname=$s 
     } 
     }  
     } 

Function Get-DiskSpace 
{ 
Param ([string[]]$servers) 
    Foreach ($s in $servers) 
    { 
    Get-WmiObject -Class win32_volume -cn $s | 
     Select-Object @{LABEL='Server';EXPRESSION={$s}}, 
     driveletter, label, 
     @{LABEL=" Total (GB)"; Expression = {" {0:N2} " -f ($_.capacity/1GB)}}, 
     @{LABEL=" Free Space (GB) ";EXPRESSION={" {0:N2} " -f ($_.freespace/1GB)}}, 
     @{LABEL=" Percent Free (%) ";Expression = { "{0:N2} " -f (($_.FreeSpace/$_.Capacity)*100) }}, 
     @{LABEL=" Percent Usage (%) ";Expression = {" {0:N2} " -f ((($_.Capacity - $_.freespace)/$_.Capacity)*100) }}   
    } 
} 

Function Get-MemoryUsage 
{ 
Param ([string[]]$servers) 
    Foreach ($s in $servers) 
    { 
    Get-WmiObject -Class win32_OperatingSystem -cn $s | 
     Select-Object @{LABEL='Server';EXPRESSION={$s}}, 
     @{LABEL=" Total Physical Memory (MB) "; Expression = {" {0:N0} " -f (($_.totalvisiblememorysize/1024))}}, 
     @{LABEL=" Free Physical Memory (MB) "; Expression = {" {0:N0} " -f (($_.freephysicalmemory/1024))}}, 
     @{LABEL=" Total Virtual Memory (MB) "; Expression = {" {0:N0} " -f (($_.totalvirtualmemorysize/1024))}}, 
     @{LABEL=" Free Virtual Memory (MB) "; Expression = {" {0:N0} " -f (($_.freevirtualmemory/1024))}}  
    } 
} 

$upTime = Get-UpTime -servers $servers | 
ConvertTo-Html -As Table -Fragment -PreContent " 
    Created on: $(get-date) 
    <h2>Server Uptime</h2> " | Out-String 

$disk = Get-DiskSpace -servers $servers | 
ConvertTo-Html -As Table -Fragment -PreContent " 
    <h2>Disk</h2> "| Out-String 

$memory = Get-MemoryUsage -servers $servers | 
ConvertTo-Html -As Table -Fragment -PreContent " 
    <h2>Memory Usage</h2> "| Out-String  


$head = @' 
<style media='screen'> 
body { 
font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; 
} 

table{ 
border-collapse: collapse; 
border: none; 
font: 10pt Verdana, Geneva, Arial, Helvetica, sans-serif; 
color: black; 
margin-bottom: 10px; 
} 

table td{ 
font-size: 12px; 
padding-left: 0px; 
padding-right: 20px; 
text-align: left; 
} 

table th { 
font-size: 12px; 
font-weight: bold; 
padding-left: 0px; 
padding-right: 20px; 
text-align: left; 
} 

h2{ clear: both; font-size: 130%;color:#354B5E; } 

h3{ 
clear: both; 
font-size: 75%; 
margin-left: 20px; 
margin-top: 30px; 
color:#475F77; 
} 

p{ margin-left: 20px; font-size: 12px; } 

table.list{ float: left; } 

table.list td:nth-child(1){ 
font-weight: bold; 
border-right: 1px grey solid; 
text-align: right; 
} 

table.list td:nth-child(2){ padding-left: 7px; } 
table tr:nth-child(even) td:nth-child(even){ background: #BBBBBB; } 
table tr:nth-child(odd) td:nth-child(odd){ background: #F2F2F2; } 
table tr:nth-child(even) td:nth-child(odd){ background: #DDDDDD; } 
table tr:nth-child(odd) td:nth-child(even){ background: #E5E5E5; } 
div.column { width: 320px; float: left; } 
div.first{ padding-right: 20px; border-right: 1px grey solid; } 
div.second{ margin-left: 30px; } 
table{ margin-left: 20px; } 
–> 
</style> 
<style media='print'> 

</style> 
'@ 

ConvertTo-Html -Head $head -PreContent "<h1>Daily Status Report - SQL Servers</h1>" -PostContent $upTime, $disk, $memory >> $path 
Invoke-Item $path 

以下の図は、わかりやすくしています。私は基本的に各サーバ(「赤」ラインでマークされている)を表示するには「改行」または「中断」が必要ですが、これを実現するPowershell/HTMLコーディングを理解することはできません。

enter image description here

答えて

1

分離を達成する最も簡単な方法は、単に各コレクションの下部に空のオブジェクトを追加するにはおそらく、非常に少なくとも、あなたは、各サーバの間に改行を与えるだろう。あなたは、これはおそらく、それは他のスクリプトにその方法論を拡張するのは難しいと行くには最善の方法ではないことをGet-DiskSpace機能

Function Get-DiskSpace 
{ 
Param ([string[]]$servers) 
    Foreach ($s in $servers) 
    { 
    Get-WmiObject -Class win32_volume -cn $s | 
     Select-Object @{LABEL='Server';EXPRESSION={$s}}, 
     driveletter, label, 
     @{LABEL=" Total (GB)"; Expression = {" {0:N2} " -f ($_.capacity/1GB)}}, 
     @{LABEL=" Free Space (GB) ";EXPRESSION={" {0:N2} " -f ($_.freespace/1GB)}}, 
     @{LABEL=" Percent Free (%) ";Expression = { "{0:N2} " -f (($_.FreeSpace/$_.Capacity)*100) }}, 
     @{LABEL=" Percent Usage (%) ";Expression = {" {0:N2} " -f ((($_.Capacity - $_.freespace)/$_.Capacity)*100) }}   
} 
    [PsCustomObject]@{Server = "";driveletter = "";label = ""; "Total (GB)" = ""; "Free Space (GB)" = ""; "Percent Free (%)" = ""; "Percent Usage (%)" = ""} 

}

ノートの一番下にこのような何かを追加することになりますが、それはあなたが探しているものを達成するでしょう。

+0

私はこれを自分のコードのどこでも動作させることはできません。 – JChutey

+1

私の謝罪は、私は引用符を間違って表示されます。答えに追加したように 'Get-DiskSpace'関数を変更するとうまくいくはずです。 –

+0

あなたは絶対伝説!ありがとう、仕事は完璧! theresは30の奇妙なサーバーのそれぞれのために4つのドライブを言うように笑って私を悩ましていた!本当にシンプルなPowershell Formを見つけようと思って、これらのスクリプト/ 4を実行するための4つのボタンを持っています/ .ps1 – JChutey

関連する問題