用PowerShell監控磁碟空間
在伺服器上經常會執行一些程式,這些程式或多或少都會需要將一些執行的過程記錄在log檔中。如果沒有定期去清除這些log檔的話,時間一久伺服器上的磁碟空間就會被用光。
不過,因為是伺服器上的自動排程程式,所以一般人一旦設定好就不再會去管理。久而久之可能就在某一天發生磁碟空間不足,造成程式無法執行的問題。
我想要監控伺服器的磁碟空間的應用程式應該是不少,不過最好的方式當然是能用Windows Server本身內建的功能是最好。
最近微軟提供了PowerShell的指令集工具。這個工具有很多的伺服器管理功能。當然也可以用來監控磁碟空間了。找了一下網路上,果然有人在分享已寫好的用PowerShell監控磁碟空間的程式碼。
即然有現成的當然就拿來改一下使用看看囉。
要執行的話,需要在PowerShell的命令列視窗中輸入 .\。要加個「.\」。不然,直接打檔名是無法執行的。
如果第一次執行有問題的話,應該也是安全性的問題。就要先執行以下的指令:
Set-ExecutionPolicy RemoteSigned
如果你的WinServer 2008找不到PowerShell,是因為預設上是沒安裝的,請自行由伺服器管理員安裝PowerShell。
如果直接用命令列執行PowerShell指令檔,而不用先進入PowerShell的方式如下:
powershell -command "& './CheckQuota.ps1'"
原本的版本中只能寄警告信通知一位管理員,後來我修改了一下,可以讀取一份清單,以便將警告訊息傳給多位管理員。程式碼如下:
PowerShell參考資料:
[1] 一些使用技巧
不過,因為是伺服器上的自動排程程式,所以一般人一旦設定好就不再會去管理。久而久之可能就在某一天發生磁碟空間不足,造成程式無法執行的問題。
我想要監控伺服器的磁碟空間的應用程式應該是不少,不過最好的方式當然是能用Windows Server本身內建的功能是最好。
最近微軟提供了PowerShell的指令集工具。這個工具有很多的伺服器管理功能。當然也可以用來監控磁碟空間了。找了一下網路上,果然有人在分享已寫好的用PowerShell監控磁碟空間的程式碼。
即然有現成的當然就拿來改一下使用看看囉。
要執行的話,需要在PowerShell的命令列視窗中輸入 .\
如果第一次執行有問題的話,應該也是安全性的問題。就要先執行以下的指令:
Set-ExecutionPolicy RemoteSigned
如果你的WinServer 2008找不到PowerShell,是因為預設上是沒安裝的,請自行由伺服器管理員安裝PowerShell。
如果直接用命令列執行PowerShell指令檔,而不用先進入PowerShell的方式如下:
powershell -command "& './CheckQuota.ps1'"
原本的版本中只能寄警告信通知一位管理員,後來我修改了一下,可以讀取一份清單,以便將警告訊息傳給多位管理員。程式碼如下:
$computers=(Get-Content CheckComputerList.txt) #單位是MB $WARING='5000000000' $SMTP='email.polaris.com.tw' $TO='justin_Lin@polaris.com.tw;justin1021@gmail.com' $FROM='FMSQLAdmin@polaris.com.tw' $MonitorList=(Get-Content MonitorManager.txt) foreach ($computer in $computers) { #$ICMP=get-wmiobject -query "select * from win32_pingstatus where address='$COMPUTER'" $ICMP=get-WmiObject Win32_PingStatus -filter "Address='$COMPUTER' " #justin #..Write-Output $ICMP if ($ICMP.StatusCode -eq '0') { #justin #..Write-Output "Check '$COMPUTER'" #..Get-WmiObject -computer $COMPUTER win32_logicaldisk Get-WmiObject -computer $COMPUTER win32_logicaldisk |? {$_.drivetype -eq '3'}|%{ if (([int64]($_.freespace/1MB)) -le "$WARING") { #justin #..Write-Output "Waring '$COMPUTER' '$_.freespace'" $ID=$_.deviceid $F=[int32]($_.freespace/1MB) $S="Waring $computer disk $ID Freespace $F MB" foreach( $Monitor in $MonitorList ) { Send-MailMessage -to $Monitor -from $FROM -subject "$S" -body "$S" -smtp $SMTP } } } } else { $N="Waring $computer not respond !" Send-MailMessage -to $TO -from $FROM -subject "$N" -body "$N" -smtp $SMTP } }
PowerShell參考資料:
[1] 一些使用技巧
留言
張貼留言