Tarefas WMI: arquivos e pastas

As tarefas WMI para arquivos e pastas alteram as propriedades do arquivo ou da pasta por meio do WMI, incluindo a criação de um compartilhamento ou a renomeação de um arquivo. Se você quiser copiar um arquivo ou ler e gravar um arquivo, a maneira mais fácil é usar o Windows Script Host FileSystemObject em vez de WMI. Para obter outros exemplos, consulte a seção Arquivos e pastas do TechNet ScriptCenter.

CIM_DataFile é uma das poucas classes CIM no WMI implementada. Evite enumerar ou consultar todas as instâncias de CIM_DataFile em um computador, pois o volume de dados provavelmente afetará o desempenho ou fará com que o computador pare de responder.

Os exemplos de script mostrados neste tópico obtêm dados somente do computador local. Para obter mais informações sobre como usar o script para obter dados de computadores remotos, consulte Conectando-se a WMI em um computador remoto.

O procedimento a seguir descreve como executar um script.

Para executar um script:

  1. Copie o código e salve-o em um arquivo com uma extensão .vbs, como filename.vbs. Certifique-se de que seu editor de texto não adicione uma extensão .txt ao arquivo.
  2. Abra uma janela do prompt de comando e navegue até o diretório onde você salvou o arquivo.
  3. Digite cscript filename.vbs no prompt de comando.
  4. Se você não puder acessar um log de eventos, verifique se está executando em um prompt de comando elevado. Alguns Logs de Eventos, como o Log de Eventos de Segurança, podem ser protegidos por Controles de Acesso do Usuário (UAC).

Observação

Por padrão, cscript exibe a saída de um script na janela do prompt de comando. Como os scripts WMI podem produzir grandes quantidades de saída, talvez você queira redirecionar a saída para um arquivo. Digite cscript filename.vbs > outfile.txt no prompt de comando para redirecionar a saída do script filename.vbs para outfile.txt.

A tabela a seguir lista exemplos de script que podem ser usados para obter vários tipos de dados do computador local.

Como fazer... Classes ou métodos WMI
...renomear um arquivo sem receber uma mensagem de erro? Use a classe CIM_DataFile . Certifique-se de passar o nome inteiro do caminho ao chamar o método Rename, por exemplo, "C:\Scripts\Test.txt" em vez de "Text.txt". Para o PowerShell, usar CIM_DataFile pode ser ineficiente. Dessa forma, você pode simplesmente usar o cmdlet 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
...determinar se os usuários têm .MP3 arquivos armazenados em seus computadores?

Use a classe CIM_DataFile e selecione os arquivos usando a seguinte cláusula 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
...criar pastas compartilhadas em um computador?

Use a classe Win32_Share e o método 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.")

...copiar uma pasta?

Use a classe Win32_Directory e o método Copy. Para o PowerShell, você pode simplesmente usar o cmdlet 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
...mover uma pasta?

Use a classe Win32_Directory e o método Copy. Para o PowerShell, você pode simplesmente usar o cmdlet 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

Tarefas do WMI para scripts e aplicativos

Exemplos de aplicativos C++ WMI

TechNet ScriptCenter

`