脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服务器之家 - 脚本之家 - VBS - VBS 硬盘读写统计(分区读写统计)

VBS 硬盘读写统计(分区读写统计)

2020-08-09 17:42VBS教程网 VBS

用vbs实现的硬盘读写统计(分区读写统计)的实现代码,想学习vbs的朋友可以参考下

WinXP,Win7,Win8

复制代码 代码如下:


'原创内容转载、引用代码核心部分请注明出处
硬盘读写统计.vbs
If (Lcase(Right(Wscript.FullName,11)) = "wscript.exe") Then
   CreateObject("WScript.Shell").Run("%Comspec% /C " &Chr(34)&"mode con cols=52 lines=22" &"&Title  硬盘读写统计.vbs  By: FastSLZ  PCEVA Or BatHome   &&Cscript.exe //NoLogo  "&Chr(34)& Wscript.ScriptFullName &Chr(34)&Chr(34)),3:Set WMI = Nothing:Wscript.Quit
End If
Dim WMI,vName,IDE,cPPP,sNow
Input = 1:InputS = Input*980
On Error Resume Next
Set WMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
Set IDE = WMI.ExecQuery("Select * from Win32_DiskDrive WHERE InterfaceType='IDE'")
Set cPPP = WMI.ExecQuery("SELECT * FROM Win32_PerfRawData_PerfDisk_PhysicalDisk WHERE Name <> '_Total'")
For Each oIDE In IDE
    For i = 0 To IDE.Count  
        Select Case oIDE.Index
            Case i
               For Each oPPP In cPPP
                   If InStr(oPPP.Name, i) Then vName = oPPP.Name
               Next
               Select Case i
                   Case 0 Disk0=oIDE.Caption&" "&oIDE.FirmwareRevision:Size0=oIDE.Size:DskP0=vName
                   Case 1 Disk1=oIDE.Caption&" "&oIDE.FirmwareRevision:Size1=oIDE.Size:DskP1=vName
                   Case 2 Disk2=oIDE.Caption&" "&oIDE.FirmwareRevision:Size2=oIDE.Size:DskP2=vName
                   Case 3 Disk3=oIDE.Caption&" "&oIDE.FirmwareRevision:Size3=oIDE.Size:DskP3=vName
                   Case 4 Disk4=oIDE.Caption&" "&oIDE.FirmwareRevision:Size4=oIDE.Size:DskP4=vName
                   Case 5 Disk5=oIDE.Caption&" "&oIDE.FirmwareRevision:Size5=oIDE.Size:DskP5=vName
               End Select

 

        End Select
    Next
Next
Set cPPP = Nothing:Set IDE= Nothing
If Disk0 <> "" Then WScript.Echo Left(DskP0,1)&":"&vbTab& Disk0 &vbTab _
                  &vbCrLf&vbTab&"厂商容量:"&Round(Size0/1000000000) &"GB" _
                  &vbCrLf&vbTab&"实际容量:"&Round(Size0/1073741824,2) &"GB" _
                  &vbCrLf&vbTab&"分区状态:"&Right(DskP0,Len(DskP0)-2)
If Disk1 <> "" Then WScript.Echo Left(DskP1,1)&":"&vbTab& Disk1 &vbTab _
                  &vbCrLf&vbTab&"厂商容量:"&Round(Size1/1000000000) &"GB" _
                  &vbCrLf&vbTab&"实际容量:"&Round(Size1/1073741824,2) &"GB" _
                  &vbCrLf&vbTab&"分区状态:"&Right(DskP1,Len(DskP1)-2)
If Disk2 <> "" Then WScript.Echo Left(DskP2,1)&":"&vbTab& Disk2 &vbTab _
                  &vbCrLf&vbTab&"厂商容量:"&Round(Size2/1000000000) &"GB" _
                  &vbCrLf&vbTab&"实际容量:"&Round(Size2/1073741824,2) &"GB" _
                  &vbCrLf&vbTab&"分区状态:"&Right(DskP2,Len(DskP2)-2)
If Disk3 <> "" Then WScript.Echo Left(DskP3,1)&":"&vbTab& Disk3 &vbTab _
                  &vbCrLf&vbTab&"厂商容量:"&Round(Size3/1000000000) &"GB" _
                  &vbCrLf&vbTab&"实际容量:"&Round(Size3/1073741824,2) &"GB" _
                  &vbCrLf&vbTab&"分区状态:"&Right(DskP3,Len(DskP3)-2)
If Disk4 <> "" Then WScript.Echo Left(DskP4,1)&":"&vbTab& Disk4 &vbTab _
                  &vbCrLf&vbTab&"厂商容量:"&Round(Size4/1000000000) &"GB" _
                  &vbCrLf&vbTab&"实际容量:"&Round(Size4/1073741824,2) &"GB" _
                  &vbCrLf&vbTab&"分区状态:"&Right(DskP4,Len(DskP4)-2)
If Disk5 <> "" Then WScript.Echo Left(DskP5,1)&":"&vbTab& Disk5 &vbTab _
                  &vbCrLf&vbTab&"厂商容量:"&Round(Size5/1000000000) &"GB" _
                  &vbCrLf&vbTab&"实际容量:"&Round(Size5/1073741824,2) &"GB" _
                  &vbCrLf&vbTab&"分区状态:"&Right(DskP5,Len(DskP5)-2)
WScript.Echo "↑请输入要监控的硬盘编号,并按回车键"
stdInput = WScript.StdIn.Readline
stdInput=Left(UCase(stdInput),1)
If stdInput > "5" Or stdInput < "0" Then MsgBox "输入错误" :WScript.Quit
If InStr(DskP0, stdInput) Then Call Network(Disk0,Size0,DskP0)
If InStr(DskP1, stdInput) Then Call Network(Disk1,Size1,DskP1)
If InStr(DskP2, stdInput) Then Call Network(Disk2,Size2,DskP2)
If InStr(DskP3, stdInput) Then Call Network(Disk3,Size3,DskP3)
If InStr(DskP4, stdInput) Then Call Network(Disk4,Size4,DskP4)
If InStr(DskP5, stdInput) Then Call Network(Disk5,Size5,DskP5)

Sub Network(Disks,Sizes,DskPs)
sNow=Now
Do
Dim A
'WScript.Echo "已运行"&Ts\3600&"小时"&(Ts mod 3600)\60&"分钟"&(Ts mod 3600) mod 60&"秒"
Set A = WMI.ExecQuery("Select * from Win32_PerfRawData_PerfDisk_PhysicalDisk Where Name='"&DskPs&"'")
For Each B In A
    R1 = B.DiskReadBytesPersec
    W1 = B.DiskWriteBytesPersec
    If RA0 = "" Then RA0 = B.DiskReadBytesPersec Else RA1 = R1 End If
    If WA0 = "" Then WA0 = B.DiskWriteBytesPersec Else WA1 = W1 End If
Next
Set A = Nothing
WScript.Sleep(InputS)
Set A = WMI.ExecQuery("Select * from Win32_PerfRawData_PerfDisk_PhysicalDisk Where Name='"&DskPs&"'")
For Each B In A
    R2 = B.DiskReadBytesPersec
    W2 = B.DiskWriteBytesPersec
Next
Set A = Nothing
WScript.Echo Disks &" " &Round(Sizes/1073741824) &"GB" &vbCrLf _
      &"实时读取:" & CheckSize((R2-R1)/Input) &"/s" &vbCrLf _
      &"实时写人:" & CheckSize((W2-W1)/Input) &"/s"&vbCrLf _
      &"脚本累计读取:" & CheckSize(RA1-RA0) &vbCrLf _
      &"脚本累计写入:" & CheckSize(WA1-WA0) &vbCrLf _
      &"开机累计读取:" & CheckSize(R1) &vbCrLf _
      &"开机累计写入:" & CheckSize(W1) &vbCrLf&vbCrLf&vbCrLf&vbCrLf&vbCrLf&vbCrLf&vbCrLf&vbCrLf&vbCrLf&vbCrLf&vbCrLf&vbCrLf&vbCrLf&vbCrLf _
      &"已运行"&Ts\3600&"小时"&(Ts mod 3600)\60&"分钟"&(Ts mod 3600) mod 60&"秒"
Ts=DateDiff("s", sNow, Now)'Ts=TS+1
Loop
End Sub

Function CheckSize(SZ)
On Error Resume Next
If SZ => 1073741824 Then
   SZ = FormatNumber(Round(SZ/1073741824,2))&" GB"
   ElseIf SZ => 1048576 Then
   SZ = FormatNumber(Round(SZ/1048576,2))&" MB"
   ElseIf SZ => 1024 Then
   SZ = FormatNumber(Round(SZ/1024,2))&" KB"
Else
   SZ = "0"&FormatNumber(Round(SZ/1024,2)) & " KB"
End If
CheckSize=Right("      " & SZ,10)
End Function


分区读写统计.vbs

复制代码 代码如下:


'原创内容转载、引用代码核心部分请注明出处
If (Lcase(Right(Wscript.FullName,11)) = "wscript.exe") Then
   CreateObject("WScript.Shell").Run("%Comspec% /C " &Chr(34)&"mode con cols=52 lines=22" &"&Title  分区读写统计.vbs  By: FastSLZ  PCEVA Or BatHome   &&Cscript.exe //NoLogo  "&Chr(34)& Wscript.ScriptFullName &Chr(34)&Chr(34)),3:Set WMI = Nothing:Wscript.Quit
End If
Input = 1:InputS = Input*1000
Dim WMI,vName,IDE,cPPP,sNow
On Error Resume Next
Set WMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")

 

Set IDE = WMI.ExecQuery("Select * from Win32_DiskDrive WHERE InterfaceType='IDE'")
Set cPPP = WMI.ExecQuery("SELECT * FROM Win32_PerfRawData_PerfDisk_PhysicalDisk WHERE Name<>'_Total'")
For Each oIDE In IDE
    For i = 0 To IDE.Count  
        Select Case oIDE.Index
            Case i
               For Each oPPP In cPPP
                   If InStr(oPPP.Name, i) Then vName = oPPP.Name
               Next
               Select Case i
                   Case 0 Disk0=oIDE.Caption&" "&oIDE.FirmwareRevision:Size0=oIDE.Size:DskP0=vName
                   Case 1 Disk1=oIDE.Caption&" "&oIDE.FirmwareRevision:Size1=oIDE.Size:DskP1=vName
                   Case 2 Disk2=oIDE.Caption&" "&oIDE.FirmwareRevision:Size2=oIDE.Size:DskP2=vName
                   Case 3 Disk3=oIDE.Caption&" "&oIDE.FirmwareRevision:Size3=oIDE.Size:DskP3=vName
                   Case 4 Disk4=oIDE.Caption&" "&oIDE.FirmwareRevision:Size4=oIDE.Size:DskP4=vName
                   Case 5 Disk5=oIDE.Caption&" "&oIDE.FirmwareRevision:Size5=oIDE.Size:DskP5=vName
               End Select

        End Select
    Next
Next
Set cPPP = Nothing:Set IDE= Nothing
If Disk0 <> "" Then DskP=Right(DskP0,Len(DskP0)-2):WScript.Echo Left(DskP0,1)&":"&vbTab& Disk0 &vbTab _
                  &vbCrLf&vbTab&"分区状态:"&Right(DskP0,Len(DskP0)-2)
If Disk1 <> "" Then DskP=DskP&" "&Right(DskP1,Len(DskP1)-2):WScript.Echo Left(DskP1,1)&":"&vbTab& Disk1 &vbTab _
                  &vbCrLf&vbTab&"分区状态:"&Right(DskP1,Len(DskP1)-2)
If Disk2 <> "" Then DskP=DskP&" "&Right(DskP2,Len(DskP2)-2):WScript.Echo Left(DskP2,1)&":"&vbTab& Disk2 &vbTab _
                  &vbCrLf&vbTab&"分区状态:"&Right(DskP2,Len(DskP2)-2)
If Disk3 <> "" Then DskP=DskP&" "&Right(DskP3,Len(DskP3)-2):WScript.Echo Left(DskP3,1)&":"&vbTab& Disk3 &vbTab _
                  &vbCrLf&vbTab&"分区状态:"&Right(DskP3,Len(DskP3)-2)
If Disk4 <> "" Then DskP=DskP&" "&Right(DskP4,Len(DskP4)-2):WScript.Echo Left(DskP4,1)&":"&vbTab& Disk4 &vbTab _
                  &vbCrLf&vbTab&"分区状态:"&Right(DskP4,Len(DskP4)-2)
If Disk5 <> "" Then DskP=DskP&" "&Right(DskP5,Len(DskP5)-2):WScript.Echo Left(DskP5,1)&":"&vbTab& Disk5 &vbTab _
                  &vbCrLf&vbTab&"分区状态:"&Right(DskP5,Len(DskP5)-2)
WScript.Echo vbCrLf&"请输入"&DskP&"中任意一个盘符"
stdInput = WScript.StdIn.Readline
stdInput=Left(UCase(stdInput),1)
If InStr(DskP,stdInput) Then Call Network(stdInput&":")
Sub Network(DskPs)
sNow=Now
Do
Dim A
Set A = WMI.ExecQuery("Select * from Win32_PerfRawData_PerfDisk_LogicalDisk Where Name = '"& DskPs &"'")
For Each B In A
    R1 = B.DiskReadBytesPersec
    W1 = B.DiskWriteBytesPersec
    If RA0 = "" Then RA0 = B.DiskReadBytesPersec Else RA1 = R1 End If
    If WA0 = "" Then WA0 = B.DiskWriteBytesPersec Else WA1 = W1 End If
Next
Set A = Nothing
WScript.Sleep(InputS)
Set A = WMI.ExecQuery("Select * from Win32_PerfRawData_PerfDisk_LogicalDisk Where Name = '"& DskPs &"'")
For Each B In A
    R2 = B.DiskReadBytesPersec
    W2 = B.DiskWriteBytesPersec
Next
Set A = Nothing
WScript.Echo "监控分区:" &DskPs &vbCrLf _
      &"实时读取:" & CheckSize((R2-R1)/Input) &"/s" &vbCrLf _
      &"实时写人:" & CheckSize((W2-W1)/Input) &"/s"&vbCrLf _
      &"脚本累计读取:" & CheckSize(RA1-RA0) &vbCrLf _
      &"脚本累计写入:" & CheckSize(WA1-WA0) &vbCrLf _
      &"开机累计读取:" & CheckSize(R1) &vbCrLf _
      &"开机累计写入:" & CheckSize(W1) &vbCrLf&vbCrLf&vbCrLf&vbCrLf&vbCrLf&vbCrLf&vbCrLf&vbCrLf&vbCrLf&vbCrLf&vbCrLf&vbCrLf&vbCrLf&vbCrLf _
      &"已运行"&Ts\3600&"小时"&(Ts mod 3600)\60&"分钟"&(Ts mod 3600) mod 60&"秒"
Ts=DateDiff("s", sNow, Now)'Ts=TS+1
Loop
End Sub

Function CheckSize(SZ)
On Error Resume Next
If SZ => 1073741824 Then
   SZ = FormatNumber(Round(SZ/1073741824,2))&" GB"
   ElseIf SZ => 1048576 Then
   SZ = FormatNumber(Round(SZ/1048576,2))&" MB"
   ElseIf SZ => 1024 Then
   SZ = FormatNumber(Round(SZ/1024,2))&" KB"
Else
   SZ = "0"&FormatNumber(Round(SZ/1024,2)) & " KB"
End If
CheckSize=Right("      " & SZ,10)
End Function

 

延伸 · 阅读

精彩推荐
  • VBSVBS数组深入浅出

    VBS数组深入浅出

    VBS数组在应用中没有像其他语句那么广泛,VBS数组存在不少功能上的局限性(如二维数组的定义、赋值),在使用上也没有java等语言那么便捷...

    VBS教程网2962020-08-18
  • VBS雷客图ASP站长安全助手vbs测试版代码

    雷客图ASP站长安全助手vbs测试版代码

    雷客图ASP站长安全助手是一个基于ASP的帮助站长维护网站安全的程序。这个版本(vbs测试版)主要用于服务器本地运行以查找ASP木马。此版本为测试版,希...

    脚本之家2312020-07-03
  • VBSAdsutil.vbs 在脚本攻击中的妙用[我非我原创]

    Adsutil.vbs 在脚本攻击中的妙用[我非我原创]

    adsutil.vbs是什么?相信用过IIS的网管员不会不知道。这是IIS自带的提供于命令行下管理IIS的一个脚本。位于%SystemDrive%\Inetpub\AdminScripts目录下。...

    VBS教程网2312020-07-07
  • VBS灵活实用VBS入门教程应用篇

    灵活实用VBS入门教程应用篇

    上一篇文章我们了解了VBS编程的一些基础知识,要更深入地学习还要学习选择结构和循环结构。 ...

    VBS教程网5742020-07-01
  • VBSVBS编程教程 (第1篇)

    VBS编程教程 (第1篇)

    VBScript的全称是:Microsoft Visual Basic Script Editon.(微软公司可视化BASIC脚本版). 正如其字面所透露的信息, VBS(VBScript的进一步简写)是基于Visual Basic的脚本语言....

    VBS教程网4812020-07-15
  • VBSVBS文本文件操作实现代码

    VBS文本文件操作实现代码

    这篇文章主要介绍了VBS文本文件操作实现代码,需要的朋友可以参考下...

    VBS代码网8912020-08-12
  • VBSVBS教程:正则表达式简介 -正则表达式语法

    VBS教程:正则表达式简介 -正则表达式语法

    正则表达式语法 一个正则表达式就是由普通字符(例如字符 a 到 z)以及特殊字符(称为元字符)组成的文字模式。该模式描述在查找文字主体时待匹配的...

    VBS教程网3302019-11-25
  • VBSWINDOWS脚本实践:为SAP补丁制作的VBS脚本代码

    WINDOWS脚本实践:为SAP补丁制作的VBS脚本代码

    本文主要分享WINDOWS脚本实践:为SAP补丁制作的VBS脚本代码,有需要的童鞋可以参考下...

    脚本之家3232020-07-06