共用方式為


WMI 工作:檔案和資料夾

檔案和資料夾的 WMI 工作會透過 WMI 變更檔案或資料夾屬性,包括建立共用或重新命名檔案。 如果您想要複製檔案或讀取和寫入檔案,最簡單的方式是使用 Windows 腳本主機 FileSystemObject ,而不是 WMI。 如需其他範例,請參閱 TechNet ScriptCenter檔案和資料夾一節。

CIM_DataFile是實作的 WMI 中少數 CIM 類別之一。 請避免列舉或查詢計算機上所有CIM_DataFile實例,因為數據量可能會影響效能或導致計算機停止回應。

本主題中顯示的腳本範例只會從本機計算機取得數據。 如需如何使用腳本從遠端電腦取得數據的詳細資訊,請參閱 連線到遠端電腦上的 WMI。

下列程式描述如何執行腳本。

執行指令碼

  1. 複製程序代碼,並將它儲存在擴展名為 .vbs 的檔案中,例如 filename.vbs。 請確定文字編輯器不會將.txt擴展名新增至檔案。
  2. 開啟命令提示字元視窗,並流覽至您儲存盤案的目錄。
  3. 在命令提示字元中輸入 cscript filename.vbs
  4. 如果您無法存取事件記錄檔,請檢查您是否正在從提高許可權的命令提示字元執行。 某些事件記錄檔,例如安全性事件記錄檔,可能會受到使用者 存取控制 (UAC) 的保護。

注意

根據預設,cscript 會在命令提示字元視窗中顯示文稿的輸出。 由於 WMI 命令稿可能會產生大量的輸出,因此您可能會想要將輸出重新導向至檔案。 在命令提示字元中輸入 >,將 filename.vbs腳本的輸出重新導向至outfile.txt

下表列出可用來從本機計算機取得各種數據類型的腳本範例。

如何… WMI 類別或方法
...重新命名檔案而不收到錯誤訊息? 使用 CIM_DataFile 類別。 請確定您在呼叫 Rename 方法時傳遞整個路徑名稱,例如 “C:\Scripts\Test.txt”,而不是 “Text.txt”。 針對 PowerShell,使用 CIM_DataFile 可能會沒有效率。 因此,您只要使用 Rename-Item Cmdlet 即可。
VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "!\\" & strComputer & "\root\cimv2")
Set colFiles = objWMIService.ExecQuery ("Select * from CIM_DataFile where Name = " & "'c:\\scripts\\toggle_service.vbs'")
For Each objFile in colFiles
    errResult = objFile.Rename("c:\scripts\toggle_service.old")
Next
PowerShell
rename-item c:\scripts\toggle_service.vbs toggle_service.old
...判斷使用者是否.MP3檔案儲存在其計算機上?

使用 CIM_DataFile 類別,並使用下列 WQLWHERE 子句選取檔案:Where Extension = “MP3”。

VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colFiles = objWMIService.ExecQuery("Select * from CIM_DataFile where Extension = 'mp3'")
For Each objFile in colFiles
    Wscript.Echo "File Name: " & objFile.Name & "." & objFile.Extension
    Wscript.Echo "Path: " & objFile.Path
Next
PowerShell
Get-WmiObject -Class CIM_DataFile -namespace "root\cimv2" -Filter "Extension = 'mp3'" | `
   format-list Name, Extension, Path
...在電腦上建立共享資料夾?

使用 Win32_Share 類別和 Create 方法。

VB
Const FILE_SHARE = 0
Const MAXIMUM_CONNECTIONS = 25
strComputer = "."
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set objNewShare = objWMIService.Get("Win32_Share")
errReturn = objNewShare.Create("C:\Finance", "FinanceShare", FILE_SHARE, MAXIMUM_CONNECTIONS, "Public share for the Finance group.")

PowerShell
              
              $FILE_SHARE = 0 $MAXIMUM_CONNECTIONS = 25 

$NewDir = new-item C:\Finance -type directory $Shares= [WMICLASS]"Win32_Share" [void]$Shares.Create("C:\Finance","FinanceShare", $FILE_SHARE, $MAXIMUM_CONNECTIONS, "Public share for the Finance group.")

...複製資料夾嗎?

使用 Win32_Directory 類別和 Copy 方法。 針對 PowerShell,您只要使用 Copy-Item Cmdlet 即可。

VB
strComputer = "." 
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") 
 
Set colFolders = objWMIService.ExecQuery("Select * from Win32_Directory where Name = 'c:\\Scripts'") 
 
For Each objFolder in colFolders 
    errResults  = objFolder.Copy("D:\Archive") 
Next 
PowerShell
Copy-Item C:\Scripts -Destination D:\Archive -Recurse
...移動資料夾嗎?

使用 Win32_Directory 類別和 Rename 方法。 針對 PowerShell,您可以直接使用 Move-Item Cmdlet。

VB
strComputer = "." 
Set objWMIService = GetObject("winmgmts:" _ 
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") 
 
Set colFolders = objWMIService.ExecQuery _ 
    ("Select * from Win32_Directory where name = 'c:\\Scripts'") 
 
For Each objFolder in colFolders 
    errResults = objFolder.Rename("C:\Admins\Documents\Archive\VBScript") 
Next
PowerShell
move-item -path C:\Scripts -destination C:\Admins\Documents\Archive\PowerShell

腳本和應用程式的 WMI 工作

WMI C++應用程式範例

TechNet ScriptCenter

`