[實務運用] 實作 Powershell 監控各主機 Disk Usage Health

如何從監控主機透過 Powershell 指令將各主機磁碟使用率產出成報表

市面上有很多各式各樣的監控軟體,也有很多精美的報表可以拿來套用

但如果被要求不能使用第三方軟體也不能隨意變更資料庫時 該怎麼辦?

今天就來分享一個 "小資" 工程師如何使用 Powershell 及 html 監控各主機磁碟使用率並產出簡單的精美報表

首先我們用 ps 讀取 list 再從各主機 win32_logicaldisk 取得磁碟使用空間 並將資料格式化 html 組成報表

結束...

就這麼簡單 XD

廢話不多說 直接分享  source code 自行修改運用


$a = "<style>"
$a = $a + "BODY{font-family: Arial;background-color:#D4FFFF;}"
$a = $a + "TABLE{border-width: 1px;border-style: solid;border-color: black;border-collapse: collapse;}"
$a = $a + "TH{border-width: 1px;padding: 0px;border-style: solid;border-color: black;background-color:#78FF78;}"
$a = $a + "TD{border-width: 1px;padding: 0px;border-style: solid;border-color: black;background-color:#EBEBFF;}"
$a = $a + "TD:nth-child(1) {text-align: left;}"
$a = $a + "TD:nth-child(2) {text-align: center;}"
$a = $a + "TD:nth-child(3) {text-align: right;}"
$a = $a + "TD:nth-child(4) {text-align: right;}"
$a = $a + "TD:nth-child(5) {text-align: right;}"
$a = $a + "</style>"

Set-ExecutionPolicy Unrestricted -Force

$File = Get-Content -Path .\Servers.txt

$DiskReport = ForEach ($Servernames in ($File)) {Get-WmiObject win32_logicaldisk <#-Credential $RunAccount#> `
-ComputerName $Servernames -Filter "Drivetype=3" -ErrorAction SilentlyContinue} 

$frag = $DiskReport | Select-Object @{Label = "Server_Name";Expression = {$_.SystemName}}, `
@{Label = "Drive_Letter";Expression = {$_.DeviceID}}, `
@{Label = "Total_Capacity_GB";Expression = {"{0:N1}" -f( $_.Size / 1gb)}}, `
@{Label = "Free_Space_GB";Expression = {"{0:N1}" -f( $_.Freespace / 1gb ) }}, `
@{Label = 'Free_Space_%'; Expression = {"{0:P0}" -f ($_.freespace/$_.size)}} | `
select -Property Server_Name, Drive_Letter, Total_Capacity_GB, Free_Space_GB, Free_Space_% | `
ConvertTo-HTML -AS Table -Fragment -PreContent '<h2>Disk Information</h2>' | Out-String

ConvertTo-HTML -head $a -PostContent $frag -PreContent "<h1>SQL Server Disk Heatlh Check Report</h1>" | Out-File .\DiskHeatlhReport.html


have fun ʕ•͡ᴥ•ʔ