最近公司在统计虚拟机的资源占用情况,魔改了一个脚本用于快速统计。

CPU 占用统计 cpu.vbs

On Error Resume Next
Set objProc  = GetObject("winmgmts:\\.\root\cimv2:win32_processor='cpu0'")
Wscript.Echo "CPU 占用率:" & objProc.LoadPercentage & "%"

内存占用统计 ram.vbs

  
strComputer = "."
set objWMI = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
set colOS = objWMI.InstancesOf("Win32_OperatingSystem")
for each objOS in colOS
strReturn = "内存总数: " &  round(objOS.TotalVisibleMemorySize / 1024) & " MB" & vbCrLf &"内存可用数: " & round(objOS.FreePhysicalMemory / 1024) & " MB" & vbCrLf &"内存使用率 :" & Round(((objOS.TotalVisibleMemorySize-objOS.FreePhysicalMemory)/objOS.TotalVisibleMemorySize)*100) & "%"
Wscript.Echo strReturn
next

硬盘占用统计 hard.vbs

Set fsoobj = CreateObject("Scripting.FileSystemObject")
 DriversInfo = GetDriversInfo
 DriversInfo = Replace(DriversInfo, "|", vbCrLf)
 sReturn ="硬盘信息:" & vbCrLf & DriversInfo
 Wscript.Echo sReturn
Function GetDriversInfo()

   GetDriversInfo = ""
   AllSpaces = 0
   AllFreeSpaces = 0
   Set drvObj = fsoobj.Drives
   For Each D In drvObj
       Err.Clear
       If D.DriveLetter <> "A" Then
           If D.isReady Then
               GetDriversInfo = GetDriversInfo & "分区:" & D.DriveLetter & vbCrLf
               GetDriversInfo = GetDriversInfo & "可用空间:" & cSize(D.FreeSpace) & vbCrLf
               GetDriversInfo = GetDriversInfo & "总大小:" & cSize( D.TotalSize) & vbCrLf
               GetDriversInfo = GetDriversInfo & "使用率 :" & (100*((D.TotalSize-D.FreeSpace)/D.TotalSize)) &"%" & vbCrLf
               GetDriversInfo = GetDriversInfo & "|"
               AllSpaces = AllSpaces + D.TotalSize 
               AllFreeSpaces = AllFreeSpaces + D.FreeSpace
             Else
           End If
         Else
       End If
   Next
   GetDriversInfo = GetDriversInfo & "总硬盘可用空间:" & cSize(AllFreeSpaces) & vbCrLf
   GetDriversInfo = GetDriversInfo & "总硬盘空间:" & cSize(AllSpaces) & vbCrLf
   GetDriversInfo = GetDriversInfo & "总硬盘使用率 :" & (100*((AllSpaces-AllFreeSpaces)/AllSpaces)) &"%" & vbCrLf
   GetDriversInfo = GetDriversInfo & "|"
End Function

 Function cSize(tSize)

     If tSize >= 1073741824 Then
         cSize = Int((tSize / 1073741824) * 1000) / 1000 & " GB"
       ElseIf tSize >= 1048576 Then
         cSize = Int((tSize / 1048576) * 1000) / 1000 & " MB"
       ElseIf tSize >= 1024 Then
         cSize = Int((tSize / 1024) * 1000) / 1000 & " KB"
       Else
         cSize = tSize & "B"
     End If

End Function

另外可以使用系统自带命令 systeminfo 获取更多系统信息。
把所有信息保存到文件之后可以使用 mailsend-go 发送 SMTP 邮件进行消息通知,由于消息可以能会乱码,还需要 iconv 进行 GB2312 到 UTF8 转换。

主脚本如下,一些消息变量需要设置:

@ECHO OFF&PUSHD %~DP0
setlocal EnableDelayedExpansion&color 3e & cd /d "%~dp0"
TITLE System Monitor
set title="%date%-%time% 127.0.0.1 Server Info"
set smtpserver="smtp.163.com"
set smtpport=25
set user="user@163.com"
set password="password"
set sendto="user@163.com"

del info.txt
del info.old

echo %title%
echo -----------------------------------
cscript //nologo cpu.vbs 
echo -----------------------------------
cscript //nologo ram.vbs
echo ----------------------------------- 
cscript //nologo hard.vbs 
echo ----------------------------------- 
systeminfo
echo ----------------------------------- 
echo 另存信息到文件中,请等待...

echo %title% >> info.txt
echo ----------------------------------- >> info.txt
cscript //nologo cpu.vbs >> info.txt
echo ----------------------------------- >> info.txt
cscript //nologo ram.vbs >> info.txt
echo ----------------------------------- >> info.txt
cscript //nologo hard.vbs >> info.txt
echo ----------------------------------- >> info.txt
systeminfo >> info.txt

echo 文件编码转换中,请等待...
ren info.txt info.old
iconv -f GB2312 -t UTF-8 < info.old > info.txt

echo 发送服务器信息到邮箱中,请等待...
mailsend-go -sub %title% -smtp %smtpserver% -port %smtpport% auth  -user  %user% -pass %password% -to %sendto% -from %user% -subject %title% -cs "utf8" body -file info.txt 
rem pause > nul
exit

将脚本另存到 D:\win 文件夹下,使用以下批处理创建每天下午5点自动收集并发送邮箱。

@ECHO OFF&PUSHD %~DP0
setlocal EnableDelayedExpansion&color 3e & cd /d "%~dp0"
echo ----------------------------------- 
echo 创建自动定时任务
schtasks  /create  /tn  getsysinfo /tr  D:\win\run.bat  /sc  DAILY /st  17:30:00
echo ----------------------------------- 
echo 查看自动定时任务
schtasks  /Query  /tn getsysinfo
echo ----------------------------------- 
rem 删除自动定时任务
rem schtasks /Delete /tn getsysinfo
pause > nul
exit

源码:GitHub