As tarefas WMI para discos e sistemas de arquivos obtêm informações sobre o estado do hardware da unidade de disco e volumes lógicos. Para obter outros exemplos, consulte o TechNet ScriptCenter em https://www.microsoft.com/technet.
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 ao WMI em um computador remoto.
O procedimento a seguir descreve como executar um script.
Executar um script
Copie o código e salve-o em um arquivo com uma extensão .vbs, como filename.vbs. Verifique se o editor de texto não adiciona uma extensão .txt ao arquivo.
Abra uma janela do prompt de comando e navegue até o diretório onde você salvou o arquivo.
Digite cscript filename.vbs no prompt de comando.
Se você não puder acessar um log de eventos, verifique se está em execução em um prompt de comando com privilégios elevados. Alguns Logs de Eventos, como o Log de Eventos de Segurança, podem ser protegidos pelos Controles de Acesso do Usuário (UAC).
Nota
Por padrão, 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, convém 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 faço para...
Classes ou métodos WMI
... descobrir quanto espaço em disco cada usuário está usando no momento em um computador?
Se você estiver usando cotas de disco, use a classe Win32_DiskQuota e recupere os valores das propriedades User e DiskSpaceUsed.
VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colQuotas = objWMIService.ExecQuery ("Select * from Win32_DiskQuota")
For each objQuota in colQuotas
Wscript.Echo "Volume: "& vbTab & objQuota.QuotaVolume
Wscript.Echo "User: "& vbTab & objQuota.User
Wscript.Echo "Disk Space Used: " & vbTab & objQuota.DiskSpaceUsed
Next
... determinar se um disco está na unidade disquete?
Use a classe Win32_LogicalDisk e verifique a propriedade FreeSpace. Se o valor for Nulo, nenhum disco estará na unidade.
VB
strComputer = ". Set objWMIService = GetObject( "winmgmts:\\" & strComputer & "\root\cimv2") Set colItems = objWMIService.ExecQuery ("Select * From Win32_LogicalDisk Where DeviceID = 'A:'")
For Each objItem in colItems
intFreeSpace = objItem.FreeSpace
If IsNull(intFreeSpace) Then
Wscript.Echo "There is no disk in the floppy drive."
Else
Wscript.Echo "There is a disk in the floppy drive."
End If
Next
foreach ($objItem in $colItems)
{
$intFreeSpace = $objItem.FreeSpace
if ($intFreeSpace -eq $null) { "There is no disk in the floppy drive." }
else { "There is a disk in the floppy drive." }
}
... distinguir entre um disco rígido fixo e um disco rígido removível?
Use a classe Win32_LogicalDisk e verifique o valor da propriedade DriveType.
VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" _
& strComputer & "\root\cimv2")
Set colDisks = objWMIService.ExecQuery _
("Select * from Win32_LogicalDisk")
For Each objDisk in colDisks
Wscript.Echo "DeviceID: "& vbTab _
& objDisk.DeviceID
Select Case objDisk.DriveType
Case 1
Wscript.Echo "No root directory. " & "Drive type could not be " & "determined."
Case 2
Wscript.Echo "DriveType: "& vbTab & "Removable drive."
Case 3
Wscript.Echo "DriveType: "& vbTab & "Local hard disk."
Case 4
Wscript.Echo "DriveType: "& vbTab & "Network disk."
Case 5
Wscript.Echo "DriveType: "& vbTab & "Compact disk."
Case 6
Wscript.Echo "DriveType: "& vbTab & "RAM disk."
Case Else
Wscript.Echo "Drive type could not be" & " determined."
End Select
Next
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colDisks = objWMIService.ExecQuery ("Select * from Win32_LogicalDisk")
For Each objDisk in colDisks
Wscript.Echo "DeviceID: " & objDisk.DeviceID
Wscript.Echo "Free Disk Space: " & objDisk.FreeSpace
Next
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colVolumes = objWMIService.ExecQuery ("Select * from Win32_Volume Where Name = 'K:\\'")
For Each objVolume in colVolumes
errResult = objVolume.Defrag()
Next
... detectar qual letra da unidade está associada a uma partição de disco lógico?
Obtenha a letra da unidade doWin32_LogicalDisk.DeviceID.
VB
ComputerName = ". Set wmiServices = GetObject ( _ "winmgmts:{impersonationLevel=Impersonate}!//" & ComputerName) ' Get physical disk drive Set wmiDiskDrives = wmiServices.ExecQuery ( "SELECT Caption, DeviceID FROM Win32_DiskDrive")
For Each wmiDiskDrive In wmiDiskDrives WScript.Echo "Disk drive Caption: " & wmiDiskDrive.Caption & VbNewLine & "DeviceID: " &" (" & wmiDiskDrive.DeviceID & ")"
'Use a ID do dispositivo de unidade de disco para ' localizar a consulta de partição associada = "ASSOCIADORES DE {Win32_DiskDrive.DeviceID='" _ & wmiDiskDrive.DeviceID & "'} WHERE AssocClass = Win32_DiskDriveToDiskPartition"
Definir wmiDiskPartitions = wmiServices.ExecQuery(query)
For Each wmiDiskPartition In wmiDiskPartitions 'Use partition device id to find logical disk Set wmiLogicalDisks = wmiServices.ExecQuery _ ("ASSOCIATORS OF {Win32_DiskPartition.DeviceID='" _ & wmiDiskPartition.DeviceID & "'} WHERE AssocClass = Win32_LogicalDiskToPartition")
For Each wmiLogicalDisk In wmiLogicalDisks
WScript.Echo "Drive letter associated" _
& " with disk drive = " _
& wmiDiskDrive.Caption _
& wmiDiskDrive.DeviceID _
& VbNewLine & " Partition = " _
& wmiDiskPartition.DeviceID _
& VbNewLine & " is " _
& wmiLogicalDisk.DeviceID
Next
Next
Next