共用方式為


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 命令稿可能會產生大量的輸出,因此您可能會想要將輸出重新導向至檔案。 在命令提示字元中輸入 cscript filename.vbs outfile.txt,將 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 類別,並使用下列 WQL WHERE 子句選取檔案: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

`