2012-08-09 129 views
1

我发现了这个简单的脚本来输出逻辑磁盘的大小。基本VBS帮助 - 优化VBS脚本

strComputer = "." 

Set objWMIService = GetObject("winmgmts:" _ 
    & "{impersonationLevel=impersonate}!\\" _ 
    & strComputer & "\root\cimv2") 

Set colDisks = objWMIService.ExecQuery _ 
    ("Select * from Win32_LogicalDisk") 

For Each objDisk in colDisks 
    Wscript.Echo "DeviceID: " & objDisk.DeviceID & " with a Disk Size: " & objDisk.Size 

Next 

我的VBS技能很差,我需要帮助:

  1. 我想获得只添加了C和d分区的单一尺寸号码一起
  2. 如果大小(从步骤1)不等于500-GB(450,000,000,000和550,000,000,000之间)我需要计算机发出警告并“按任意键”继续
  3. 我不想弹出一个窗口,因为这将要运行从WinPE的提示中,是否可以在提示窗口中获得输出W'

我问了很多,所以提前谢谢你,如果你能帮助

回答

1

您需要使用CSCRIPT启动脚本。 此代码来自http://ask.metafilter.com/79481/vbscript-printing-to-command-line 这允许回声去命令行而不是消息框。

CheckStartMode 
strComputer = "." 

Set objWMIService = GetObject("winmgmts:" _ 
& "{impersonationLevel=impersonate}!\\" _ 
& strComputer & "\root\cimv2") 

Set colDisks = objWMIService.ExecQuery _ 
("Select * from Win32_LogicalDisk") 

For Each objDisk in colDisks 
    If(objDisk.DeviceID="C:" or objDisk.DeviceID="D:") then 
     Wscript.Echo "DeviceID: " & objDisk.DeviceID & " with a Disk Size: " & objDisk.Size 
     TotalSize = CCur(TotalSize) + CCur(objDisk.Size) 
    End if 
Next 
If(TotalSize <450000000000 or TotalSize >550000000000) then 
    Wscript.Echo "Disk size of " & TotalSize & " is out of range." 
    Wscript.Echo "Press enter to contine." 
    z = WScript.StdIn.Read(1) 
End if 

Wscript.Echo "Complete, Press enter to end." 
z = WScript.StdIn.Read(1) 
Sub CheckStartMode 
    ' Returns the running executable as upper case from the last \ symbol 
    strStartExe = UCase(Mid(wscript.fullname, instrRev(wscript.fullname, "\") + 1)) 

    If Not strStartExe = "CSCRIPT.EXE" Then 
      ' This wasn't launched with cscript.exe, so relaunch using cscript.exe explicitly! 
      ' wscript.scriptfullname is the full path to the actual script 

      set   oSh = CreateObject("wscript.shell") 
      oSh.Run "cscript.exe """ & wscript.scriptfullname & """" 
      wscript.quit 

    End If 
End Sub 
+0

谢谢你的回复!总大小应该是C + D(加在一起),然后针对(objDisk.Size <450000000000或objDisk.Size> 550000000000)进行检查,现在它们似乎是单独的。对不起,我在我的第一篇文章中没有具体说明:( – ToastMan 2012-08-09 21:49:59

+0

支票为CheckStartMode。整洁!@ToastMan,使'Like objDisk.DeviceID =“C:”然后SizeC = objDisk.Size'和'If objDisk.DeviceID =“D:”Then SizeD = objDisk.Size'。在for-each-next循环之后,添加两个大小:'If(SizeC + SizeD)<450000000000或(SizeC + SizeD)> 550000000000然后Wscript。回声“磁盘大小超出范围。” – AutomatedChaos 2012-08-10 07:35:01

+0

AutomatedChaos是正确的。我编辑了答案以反映这种变化。 – 2012-08-10 14:00:29