将摘要报告和磁盘信息添加到VB脚本

时间:2013-04-04 20:57:17

标签: windows vbscript

我希望有人可以帮我解决这个问题。我想在这个脚本中添加两个东西,但似乎根本无法使它工作。

该脚本运行正常,但无法正常工作的是尝试添加磁盘信息并尝试为磁盘总大小创建摘要报告。

在它的最后我试图输出什么

wmic diskdrive list brief /format:list

会给你。

类似的东西:

Caption=WDC WD2500BEKT-75PVMT1
DeviceID=\\.\PHYSICALDRIVE0
Model=WDC WD2500BEKT-75PVMT1
Partitions=1
Size=250056737280

这是迄今为止的脚本

Option Explicit

const strComputer = "."
const strReport = "c:\path\to\file"


Dim objWMIService, objItem, colItems 
Dim strDriveType, strDiskSize, txt

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_LogicalDisk WHERE        DriveType=3")
txt = "Drive" & vbtab & "Size" & vbtab & "Used" & vbtab & "Free" & vbtab & "Free(%)" & vbcrlf
For Each objItem in colItems

DIM pctFreeSpace,strFreeSpace,strusedSpace

pctFreeSpace = INT((objItem.FreeSpace / objItem.Size) * 1000)/10
strDiskSize = Int(objItem.Size /1073741824) & "Gb"
strFreeSpace = Int(objItem.FreeSpace /1073741824) & "Gb"
strUsedSpace = Int((objItem.Size-objItem.FreeSpace)/1073741824) & "Gb"
txt = txt & objItem.Name & vbtab & strDiskSize & vbtab & strUsedSpace & vbTab & strFreeSpace & vbtab & pctFreeSpace & vbcrlf

Next

writeTextFile txt, strReport
wscript.echo "Report written to " & strReport & vbcrlf & vbcrlf & txt

' Procedure to write output to a text file
private sub writeTextFile(byval txt,byval strTextFilePath)
Dim objFSO,objTextFile

set objFSO = createobject("Scripting.FileSystemObject")

set objTextFile = objFSO.CreateTextFile(strTextFilePath)

objTextFile.Write(txt)

objTextFile.Close
SET objTextFile = nothing
end sub

1 个答案:

答案 0 :(得分:2)

wmic调用和你的脚本完全不同。前者查询Win32_DiskDrive类以收集有关物理磁盘的信息,而后者查询Win32_LogicalDisk类以收集有关的信息。

您可以使用以下内容重现wmic命令的输出:

Set wmi = GetObject("winmgmts://./root/cimv2")
For Each disk In wmi.ExecQuery("SELECT * FROM Win32_DiskDrive")
  WScript.Echo "Caption=" & disk.Caption & vbNewLine _
    & "DeviceID=" & disk.DeviceID & vbNewLine _
    & "Model=" & disk.Model & vbNewLine _
    & "Partitions=" & disk.Partitions & vbNewLine _
    & "Size=" & disk.Size
Next

但是,此查询返回的大小是物理磁盘的原始容量。在此级别,您无法区分块是“空闲”还是“已使用”。这些是适用于文件系统的概念。在该级别上,扇区包含或不包含一个或多个文件或文件片段。当它不包含任何文件时它是“免费的”,否则就“使用”。但是,在该级别上,您不会获得有关“分区”的任何信息,因为它们存在于较低级别(分区包含文件系统)。

您需要做的是确定您实际要报告的信息,然后从相关的WMI类中选择适当的属性。