次の方法で共有


WMI タスク: ディスクとファイル システム

ディスクとファイル システムの WMI タスクは、ディスク ドライブのハードウェアの状態と論理ボリュームに関する情報を取得します。 その他の例については、https://www.microsoft.com/technetの TechNet ScriptCenter を参照してください。

このトピックに示すスクリプトの例では、ローカル コンピューターからのみデータを取得します。 スクリプトを使用してリモート コンピューターからデータを取得する方法の詳細については、「リモート コンピューター上の 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 クラスまたはメソッド
...各ユーザーが現在コンピューターで使用しているディスク領域の量を確認してください。 ディスク クォータを使用している場合は、Win32_DiskQuota クラスを使用し、User の値を取得し、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
PowerShell
$strComputer = "."
$colItems = Get-WmiObject -Class Win32_DiskQuota -ComputerName $strComputer
foreach ($objQuota in $colItems) 
{ 
    "Volume: " + $objQuota.QuotaVolume
    "User: " + $objQuota.User      
    "Disk Space Used: " + $objQuota.DiskSpaceUsed
}
...リムーバブル ドライブがいつコンピューターに追加されたか、コンピューターから削除されたかを判断する

Win32_VolumeChangeEvent クラスに対してクエリを実行する監視スクリプトを使用します。

VB
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
...CD が CD-ROM ドライブにあるかどうかを判断する

Win32_CDROMDrive クラスと MediaLoaded プロパティを使用します。

VB
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
PowerShell
$strComputer = "."
$colItems = Get-WmiObject -Class Win32_CDROMDrive -ComputerName $strComputer
foreach ($objItem in $colItems)
{
    "Device ID: " + $objItem.DeviceID
    "MediaLoaded: " + $objItem.MediaLoaded
}
...ディスクがフロッピー ドライブにあるかどうかを確認する

Win32_LogicalDisk クラスを使用し、FreeSpace プロパティ 確認します。 値が Null の場合、ディスクはドライブ内にありません。

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

PowerShell
              
              $strComputer = "." $colItems = Get-WmiObject -Class Win32_LogicalDisk -Namespace "root\cimv2" -ComputerName $strComputer |' Where-Object { $_.DeviceID -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." } }

...固定ハード ディスクとリムーバブル ハード ディスクを区別する

Win32_LogicalDisk クラスを使用し、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

PowerShell
              
              $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." } } }

...ドライブで使用されているファイル システムを決定する

Win32_LogicalDisk クラスと FileSystem プロパティを使用します。

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: " & objDisk.DeviceID       
    Wscript.Echo "File System: " & objDisk.FileSystem
Next
...ドライブで使用可能な空き領域の量を決定する

Win32_LogicalDisk クラスと FreeSpace プロパティを使用します。

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: " & objDisk.DeviceID       
    Wscript.Echo "Free Disk Space: " & objDisk.FreeSpace
Next
...ドライブのサイズを決定しますか?

Win32_LogicalDisk クラスと Size プロパティを使用します。

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: " & objDisk.DeviceID       
    Wscript.Echo "Disk Size: " & objDisk.Size
Next
...コンピューターにマップされているドライブを確認する

Win32_MappedLogicalDisk クラスを使用します。

VB
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
...ハード ディスクを最適化しますか?

Win32_Volume クラスと Defrag メソッドを使用します。

VB
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
...論理ディスク パーティションに関連付けられているドライブ文字を検出しますか?
  1. Win32_DiskDrive クラスから開始し、DeviceID プロパティと Win32_DiskDriveToDiskPartition 関連付けクラスを使用して、Win32_DiskPartition のインスタンスを照会します。 これで、物理ドライブ上のパーティションのコレクションが作成されました。
  2. Win32_DiskPartition.DeviceID プロパティと Win32_LogicalDiskToPartition 関連付けクラスを使用して、パーティションを表す Win32_LogicalDisk のクエリを実行します。
  3. Win32_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")

wmiDiskDrives WScript.Echo の各 wmiDiskDrive の "Disk drive Caption: " & wmiDiskDrive.Caption & VbNewLine & "DeviceID: " & " (" & wmiDiskDrive.DeviceID & ")"

'Use the disk drive device id to ' find associated partition query = "ASSOCIATEDORS OF {Win32_DiskDrive.DeviceID='" _ & wmiDiskDrive.DeviceID & "'} WHERE AssocClass = Win32_DiskDriveToDiskPartition"
set 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

スクリプトとアプリケーションの WMI タスクの

WMI C++ アプリケーションの例

TechNet ScriptCenter

`