WMI タスク: ファイルとフォルダー
[アーティクル] 07/25/2024
8 人の共同作成者
フィードバック
この記事の内容
ファイルとフォルダーの WMI タスクでは、共有の作成やファイル名の変更など、WMI を介してファイルまたはフォルダーのプロパティを変更します。 ファイルのコピーまたはファイルの読み取りと書き込みを行う場合、最も簡単な方法は、WMI ではなく Windows スクリプト ホスト FileSystemObject を使用することです。 その他の例については、TechNet ScriptCenter の「ファイルとフォルダー 」のセクションを参照してください。
CIM_DataFile は、実装されている WMI の数少ない CIM クラス の 1 つです。 データの量が、パフォーマンスに影響を与えたり、コンピューターが応答を停止したりする原因となる可能性があるため、コンピューター上の CIM_DataFile のすべてのインスタンスの列挙またはクエリは実行しないようにしてください。
このトピックに示すスクリプトのサンプルでは、ローカル コンピューターからのみデータを取得します。 スクリプトを使用してリモート コンピューターからデータを取得する方法の詳細については、「モート コンピューター上の WMI への接続 」を参照してください。
以下の手順ではスクリプトの実行方法を説明します。
スクリプトを実行するには
コードをコピーし、拡張子が .vbs のファイル (filename.vbs など) に保存します。 テキスト エディターによってファイルに .txt 拡張子が追加されていないことを確認します。
コマンド プロンプト ウィンドウを開き、ファイルを保存したディレクトリに移動します。
コマンド プロンプトで「cscript filename.vbs 」と入力します。
イベント ログにアクセスできない場合は、管理者特権でのコマンド プロンプトから実行しているかどうかを確認します。 セキュリティ イベント ログなどの一部のイベント ログは、ユーザー アクセス制御 (UAC) によって保護されている場合があります。
Note
既定では、スクリプトは出力をコマンド プロンプト ウィンドウに表示します。 WMI スクリプトでは大量の出力が生成される場合があるため、出力をファイルにリダイレクトすることが必要になることがあります。 コマンド プロンプトで「cscript filename.vbs > outfile.txt 」と入力して、filename.vbs スクリプトの出力を outfile.txt にリダイレクトします。
次の表では、ローカル コンピューターからさまざまな種類のデータを取得するために使用できるスクリプトの例を示しています。
エラー メッセージなしでファイルの名前を変更する方法
CIM_DataFile クラスを使用します。 Rename メソッドを呼び出すときは、必ずパス名全体を渡すようにします (例: "Text.txt" ではなく "C:\Scripts\Test.txt")。 PowerShell の場合、CIM_DataFile の使用は非効率的な場合があります。 そのため、単純に Rename-Item コマンドレットを使用できます。
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
rename-item c:\scripts\toggle_service.vbs toggle_service.old
ユーザーが自分のコンピューターに .MP3 ファイルを保存しているかどうかを特定する方法
CIM_DataFile クラスを使用し、次の WQL WHERE 句を使用してファイルを選択します。Where Extension = "MP3"。
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
Get-WmiObject -Class CIM_DataFile -namespace "root\cimv2" -Filter "Extension = 'mp3'" | `
format-list Name, Extension, Path
コンピューター上に共有フォルダーを作成する方法
Win32_Share クラスと Create メソッドを使用します。
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.")
$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 コマンドレットを使用できます。
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
Copy-Item C:\Scripts -Destination D:\Archive -Recurse
フォルダを移動する方法
Win32_Directory クラスと Rename メソッドを使用します。 PowerShell では、単純に Move-Item コマンドレットを使用できます。
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
move-item -path C:\Scripts -destination C:\Admins\Documents\Archive\PowerShell
スクリプトとアプリケーションの WMI タスク
WMI C++ アプリケーションの例
TechNet ScriptCenter
`