Úlohy rozhraní WMI pro disky a systémy souborů získávají informace o stavu hardwaru a logických svazcích diskové jednotky. Další příklady najdete na webu TechNet ScriptCenter na https://www.microsoft.com/technet.
Příklady skriptů uvedené v tomto tématu získávají data pouze z místního počítače. Další informace o tom, jak pomocí skriptu získat data ze vzdálených počítačů, naleznete v tématu Připojení k rozhraní WMI na vzdáleném počítači.
Následující postup popisuje, jak spustit skript.
Spuštění skriptu
- Zkopírujte kód a uložte ho do souboru s příponou .vbs, například název_souboru.vbs. Ujistěte se, že textový editor nepřidá do souboru .txt příponu.
- Otevřete okno příkazového řádku a přejděte do adresáře, do kterého jste soubor uložili.
- Na příkazovém řádku zadejte cscript filename.vbs.
- Pokud nemáte přístup k protokolu událostí, zkontrolujte, jestli používáte příkazový řádek se zvýšenými oprávněními. Některé protokoly událostí, jako je protokol událostí zabezpečení, můžou být chráněné řízením uživatelských přístupů (UAC).
Poznámka
Ve výchozím nastavení cscript zobrazí výstup skriptu v okně příkazového řádku. Vzhledem k tomu, že skripty rozhraní WMI můžou vytvářet velké objemy výstupu, můžete chtít výstup přesměrovat na soubor. Na příkazovém řádku zadejte cscript filename.vbs > outfile.txt a přesměrujte výstup skriptu název_souboru.vbs do outfile.txt.
Následující tabulka uvádí příklady skriptů, které lze použít k získání různých typů dat z místního počítače.
| ... Zjistěte, kolik místa na disku aktuálně používá každý uživatel na počítači? |
Pokud používáte diskové kvóty, použijte třídu Win32_DiskQuota a načtěte hodnoty vlastností User a DiskSpaceUs ed.
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
|
$strComputer = "."
$colItems = Get-WmiObject -Class Win32_DiskQuota -ComputerName $strComputer
foreach ($objQuota in $colItems)
{
"Volume: " + $objQuota.QuotaVolume
"User: " + $objQuota.User
"Disk Space Used: " + $objQuota.DiskSpaceUsed
}
|
|
| ... určete, kdy byla vyměnitelná jednotka přidána nebo odebrána z počítače? |
Použijte monitorovací skript, který se dotazuje na třídu Win32_VolumeChangeEvent.
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colMonitoredEvents = objWMIService. ExecNotificationQuery( "Select * from Win32_VolumeChangeEvent")
Do
Set objLatestEvent = colMonitoredEvents.NextEvent
Wscript.Echo objLatestEvent.DriveName
Wscript.Echo objLatestEvent.EventType
Wscript.Echo objLatestEvent.Time_Created
Loop
|
|
| ... určuje, jestli je disk CD v jednotce CD-ROM? |
Použijte třídu Win32_CDROMDrive a vlastnost MediaLoaded.
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery( "Select * from Win32_CDROMDrive")
For Each objItem in colItems
Wscript.Echo "Device ID: " & objItem.DeviceID
Wscript.Echo "Media Loaded: " & objItem.MediaLoaded
Next
|
$strComputer = "."
$colItems = Get-WmiObject -Class Win32_CDROMDrive -ComputerName $strComputer
foreach ($objItem in $colItems)
{
"Device ID: " + $objItem.DeviceID
"MediaLoaded: " + $objItem.MediaLoaded
}
|
|
| ... určuje, jestli je disk v disketové jednotce? |
Použijte třídu Win32_LogicalDisk a zkontrolujte vlastnost FreeSpace. Pokud je hodnota Null, pak se na jednotce nenachází žádný disk.
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
|
$strComputer = "." $colItems = Get-WmiObject -Class Win32_LogicalDisk -Namespace "root\cimv2" -ComputerName $strComputer | ' Where-Object { $_. ID zařízení -eq "A:" } 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." }
}
|
|
| ... rozlišovat mezi pevným pevným diskem a vyměnitelným pevným diskem? |
Použijte třídu Win32_LogicalDisk a zkontrolujte hodnotu vlastnosti DriveType.
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 = "." $colDisks = Get-WmiObject -Class Win32_LogicalDisk -ComputerName $strComputer foreach ($objDisk in $colDisks)
{
"DeviceID: " + $objDisk.deviceID
switch ($objDisk.DriveType)
{
'1' { "No root directory. Drive type could not be determined." }
'2' { "DriveType: Removable drive." }
'3' { "DriveType: Local hard disk." }
'4' { "DriveType: Network disk." }
'5' { "DriveType: Compact disk." }
'6' { "DriveType: RAM disk." }
default: { "Drive type could not be determined." }
}
}
|
|
| ... určit, jaký systém souborů se používá na jednotce? |
Použijte třídu Win32_LogicalDisk a vlastnost FileSystem.
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 "File System: " & objDisk.FileSystem
Next
|
|
| ... určete, kolik volného místa je na jednotce k dispozici? |
Použijte třídu Win32_LogicalDisk a vlastnost FreeSpace.
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
|
|
| ... určit velikost jednotky? |
Použijte třídu Win32_LogicalDisk a vlastnost Size.
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 "Disk Size: " & objDisk.Size
Next
|
|
| ... Zjistěte, které jednotky se mapují na počítači? |
Použijte třídu Win32_MappedLogicalDisk.
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colDisks = objWMIService. ExecQuery("Select * from Win32_MappedLogicalDisk")
For Each objDisk in colDisks
Wscript.Echo "Device ID: " & objDisk.DeviceID
Wscript.Echo "Name: " & objDisk.Name
Wscript.Echo "Free Space: " & objDisk.FreeSpace
Wscript.Echo "Size: " & objDisk.Size
Next
|
|
| ... defragmentace pevného disku? |
Použijte třídu Win32_Volume a metodu Defrag.
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
|
|
| ... zjistíte, které písmeno jednotky je přidružené k oddílu logického disku? |
- Začněte s Win32_DiskDrive třídou a dotazem na instance Win32_DiskPartition pomocí vlastnosti id zařízení a třídy přidružení Win32_DiskDriveToDiskPartition. Teď máte kolekci oddílů na fyzické jednotce.
- Zadejte dotaz na Win32_LogicalDisk, který představuje oddíl pomocí vlastnosti Win32_DiskPartition.DeviceID a třídy přidružení Win32_LogicalDiskToPartition.
- Získejte písmeno jednotky zWin32_LogicalDisk.DeviceID .
ComputerName = "." Nastavení wmiServices = GetObject ( _ "winmgmts:{impersonationLevel=Impersonate}!/" & Názevpočítače) ' Get physical disk drive Set wmiDiskDrives = wmiServices.ExecQuery ( "SELECT Caption, DeviceID FROM Win32_DiskDrive") Pro každý wmiDiskDrive ve wmiDiskDrives WScript.Echo "Titulek diskové jednotky: " & wmiDiskDrive.Caption & VbNewLine & "DeviceID: " & " (" & wmiDiskDrive.DeviceID & ")"
"Pomocí ID zařízení diskové jednotky vyhledejte přidružený dotaz oddílu = "ASOCIATORS OF {Win32_DiskDrive.DeviceID='" _ & wmiDiskDrive.DeviceID & "'} WHERE AssocClass = Win32_DiskDriveToDiskPartition"
Nastavení wmiDiskPartitions = wmiServices.ExecQuery(dotaz)
Pro každou položku wmiDiskPartition ve wmiDiskPartitions Použít ID zařízení oddílu k vyhledání logického disku 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
|
|
-
úlohy rozhraní WMI pro skripty a aplikace
-
příklady aplikací jazyka WMI C++
-
TechNet ScriptCenter
`