我正在尝试创建逻辑以在本地驱动器和映射到驱动器的UNC路径上查找可用空间。
在本地驱动器上查找可用空间的逻辑运行正常。至于UNC路径映射驱动器,我已经读过Win32_LogicalDisk
无法可靠地为映射驱动器执行此操作,所以一直试图让Win32_MappedLogicalDisk
与.caption
一起工作,我已经看到了在一个示例代码中,.DeviceID
(后者因为在查找前者之后它似乎是只读的)。
然而,即使在验证逻辑正在向Win32_MappedLogicalDisk.DeviceID='E:'
提供objWMI.get(s)
之后,我也会收到Invalid object path / 8004103A / SWbemServicesEx
错误。
我不经常在示例中看到objWMI.get
形式(通常是较长的GetObject("winmgmts:"...
和...execquery
种类),所以不确定是否使用了两者中的短片导致问题。
顺便说一句:如果有人可以详细说明getobject(""winmgmts:"
和objWMI.get...
之间的差异,或者指出我要阅读有关该主题的材料,那将是大。像较短的版本,但数字可能是有限的使用。
在下面找到现在的逻辑:
TempDrive = ""
SkipSpaceCheck = false
s = wscript.scriptfullname
if left(s, 2) = "\\" then
for i = 69 to 90
ss = chr(i) & ":"
if not objFSO.driveexists(ss) then
TempDrive = ss
exit for
end if
next
if TempDrive <> "" then
objNetwork.mapnetworkdrive TempDrive, left(s, instrrev(s, "\") - 1)
s = "Win32_MappedLogicalDisk.DeviceID='" & TempDrive & "'"
else
SkipSpaceCheck = true
end if
else
s = objFSO.getfile(s).drive
s = "Win32_LogicalDisk.DeviceID='" & s & "'"
end if
if not SkipSpaceCheck then
wscript.echo s
set objLDisk = objWMI.get(s)
if cdbl(objLDisk.freespace) < cdbl(MinStorageSpace) then
strConfirm = msgbox("Drive " & s & " has ONLY " & round(objLDisk.freespace / 1048576, 1) & "MB space free. Continue?", 36, "Test")
if strConfirm = 7 then wscript.quit
end if
if TempDrive <> "" then objNetwork.removenetworkdrive Tempdrive
else
wscript.echo "Space check skipped on account of no spare drive letters available to map UNC script running directory to, to obtain free space" & vbcrlf & vbcrlf & "Click OK to proceed"
end if