WMI タスク: ファイルとフォルダー

ファイルとフォルダーの WMI タスクは、共有の作成やファイル名の変更など、WMI を使用してファイルまたはフォルダーのプロパティを変更します。 ファイルのコピーまたはファイルの読み取りと書き込みを行う場合、最も簡単な方法は、WMI ではなく Windows スクリプト ホスト FileSystemObject を使用することです。 その他の例については、TechNet ScriptCenter の「ファイルとフォルダー」セクションを参照してください。

CIM_DataFile は、実装されている WMI の数少ない CIM クラス の 1 つです。 データの量がパフォーマンスに影響を与えたり、コンピューターが応答を停止したりする可能性があるため、コンピューター上の 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 メソッドを呼び出すときは、パス名全体 ("Text.txt" ではなく "C:\Scripts\Test.txt" など) を必ず渡してください。 PowerShell の場合、CIM_DataFile の使用は非効率的な場合があります。 そのため、単に Rename-Item コマンドレットを使用できます。
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 コマンドレットを使用できます。

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 コマンドレットを使用できます。

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

`