嗨,Scripting Guy!

Hey,Scripting Guy!

歡迎使用全新的 TechNet 專欄,Microsoft Scripting Guys 會在此為您解答有關系統管理指令碼的常見問題。您有關於系統管理指令碼方面的問題嗎?請將電子郵件傳送到 scripter@microsoft.com。我們無法保證能夠逐一回答每個問題,不過我們會盡力而為。

今天的問題:可以使用指令碼判斷遠端電腦上資料夾的大小嗎?


可以使用指令碼判斷遠端電腦上資料夾的大小嗎?

嗨,Scripting Guy!可以使用指令碼判斷遠端電腦上資料夾的大小嗎?

-- SS

SS,您好。您「認為」您可以進行這項工作,對吧?尤其若是您已經瀏覽過 WMI 類別 Win32_Directory,而且注意到了 FileSize 屬性。根據如此,您可能會認為「沒錯, 只要撰寫一個 WMI 指令碼就可取得資料夾大小」。然後您就撰寫一個與下列相似的指令碼,嘗試判斷電腦 atl-ws-01 上 C:\Scripts 資料夾的大小:
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!專欄中已示範了類似的技術。

如果在遠端電腦上沒有任何共用資料夾,該怎麼做?很抱歉,對此我們沒有太多的建議,您也許可以在網際網路上,搜尋可取得遠端電腦上檔案及資料夾大小的協力廠商公用程式。


如需詳細資訊

查看嗨,Scripting Guy!- 過往文件

 

回到頁首 回到頁首