다음을 통해 공유


WMI 작업: 디스크 및 파일 시스템

디스크 및 파일 시스템에 대한 WMI 작업은 디스크 드라이브 하드웨어 상태 및 논리 볼륨에 대한 정보를 가져옵니다. 다른 예제는 TechNet ScriptCenter(https://www.microsoft.com/technet)를 참조하세요.

이 항목에 표시된 스크립트 예제는 로컬 컴퓨터에서만 데이터를 가져옵니다. 스크립트를 사용하여 원격 컴퓨터에서 데이터를 가져오는 방법에 대한 자세한 내용은 원격 컴퓨터에서 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 클래스를 사용하고 UserDiskSpaceUsed 속성의 값을 검색합니다.
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") 

각 wmiDiskDrive in wmiDiskDrives WScript.Echo "디스크 드라이브 캡션: " & wmiDiskDrive.Caption & VbNewLine & "DeviceID: " " & " (" & wmiDiskDrive.DeviceID & ")"

'디스크 드라이브 디바이스 ID를 사용하여 연결된 파티션 쿼리 찾기 = "ASSOCIATORS 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

`