strComputer = "atl-ws-01"
Set objWMIService = GetObject _
("winmgmts:" & "!\\" & strComputer & "\root\cimv2")
Set colFolders = objWMIService.ExecQuery _
("Select * from Win32_Directory where Name = " _
& "'c:\\scripts'")
For Each objFolder in colFolders
Wscript.Echo objFolder.FileSize
Next
不幸地,這個指令碼不符您期望,倒不是因為指令碼或指令碼語法問題,而是 FileSize 屬性無法發揮作用。這跟您連接的資料夾無關,也與資料夾是否在本機電腦或遠端電腦上無關:FileSize 一律會傳回 Null。
注意:我們應該提醒您在 CIM_DataFile 類別中還有一個 FileSize 屬性,是 WMI 類別用來管理檔案的。「那個」 FileSize 屬性就可發揮作用;它會準確地告訴您檔案的位元組數大小。
那應該怎麼做呢?您可以一律使用 FileSystemObject 判斷資料夾的大小。例如,這裡有一個指令碼可告訴您 C:\Scripts 資料夾的大小:
Set objFolder = objFSO.GetFolder("C:\Documents and Settings")
Set objFile = objFSO.CreateTextFile("c:\scripts\folder_size.txt")
Wscript.Echo objFolder.Size
唯一的問題是,FileSystemObject 的設計是在本機上運作,但是您要測量大小的資料夾位在遠端電腦上。所以知道該怎麼解決這個問題嗎?還好,至少知道一項解決方法。
如果您是使用管理共用 (就像是 C$ 及 D$),那麼連接到適當的管理共用就可以取得這個資料夾的資訊。換句話說,您可以使用類似的方法,就是使用 UNC 路徑 \\atl-ws-01\C$\Scripts 來取得位於遠端電腦上的 C:\Scripts 資料夾資訊:
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder("\\atl-ws-01\C$\Scripts")
Wscript.Echo objFolder.Size
如果您是使用管理共用,這個方法就太好用了。不過,如果在電腦上停用這些共用會怎樣呢?會發生什麼事?
嗯,事實上,除非您想將資料夾大小指令碼當成登入或登出指令碼執行,否則這可能行不通。如果您在遠端電腦上具有「某種」共用的資料夾,您可以將資料夾大小指令碼複製到遠端電腦,在本機上執行並取得資料,然後再將指令碼刪除;我們在稍早的 嗨,Scripting Guy!專欄中已示範了類似的技術。
如果在遠端電腦上沒有任何共用資料夾,該怎麼做?很抱歉,對此我們沒有太多的建議,您也許可以在網際網路上,搜尋可取得遠端電腦上檔案及資料夾大小的協力廠商公用程式。 |