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
以上是“VBS如何实现硬盘读写统计”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网行业资讯频道!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341