안녕하세요, Scripting Guy! - 사용자 한 명의 디스크 할당량 정보는 어떻게 볼 수 있습니까?


새로운 TechNet 칼럼에 오신 것을 환영합니다. 이 칼럼에서는 Microsoft Scripting Guy가 시스템 관리 스크립팅과 관련하여 자주 물어보는 질문에 대한 답변을 드립니다. 시스템 관리 스크립팅에 대해 궁금한 내용이 있으십니까? 그렇다면 scripter@microsoft.com으로 전자 메일을 보내 주십시오. 모든 질문을 다룰 수는 없지만 최선을 다해 답변을 드리겠습니다.

오늘의 질문: 사용자 한 명의 디스크 할당량 정보는 어떻게 볼 수 있습니까?


사용자 한 명의 디스크 할당량 정보는 어떻게 볼 수 있습니까?

Q 안녕하세요, Scripting Guy! 사용자 한 명의 디스크 할당량 정보는 어떻게 볼 수 있습니까?
-- 진숙
A 진숙님, 한 사용자에 대한 디스크 할당량 정보는 사용하는 Windows 버전에 따라 여러 가지 방법으로 볼 수 있습니다. Windows XP나 Windows 2003을 실행하는 경우 Win32_DiskQuota 클래스를 통해 사용자의 디스크 할당량 정보를 볼 수 있습니다. 다음은 kenmyer라는 사용자의 디스크 할당량 정보를 표시하는 스크립트입니다.
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colQuotas = objWMIService.ExecQuery _
    ("Select * From Win32_DiskQuota Where " & _
        "User='Win32_Account.Domain=""fabrikam"",Name=""kenmyer""'")
    
For Each objQuota in colQuotas
    Wscript.Echo "Disk Space Used: " & objQuota.DiskSpaceUsed
    Wscript.Echo "Limit: " & objQuota.Limit 
    Wscript.Echo "Quota Volume: " & objQuota.QuotaVolume  
   
    intStatus = objQuota.Status 
    Select Case intStaus 
        Case 0 
            strStatus = "OK"
        Case 1
            strStatus = "Warning limit reached"
        Case 2
            strStatus = "Quota exceeded"
        Case Else
            strStatus = "Unknown"
     End Select
    Wscript.Echo "Status: " & strStatus 
    Wscript.Echo "Warning Limit: " & objQuota.WarningLimit
Next

큰따옴표가 많아서 WQL 쿼리가 좀 복잡해 보이기는 하지만 Win32_DiskQuota 클래스의 사용 방식이 원래 이렇습니다. User 속성은 사실 참조 속성이며, 다른 개체 및 클래스(이 경우 Win32_Account 클래스)에 대한 포인터입니다. 다행히 생각만큼 어렵지는 않습니다. 예를 들어 사용자 계정이 contoso 도메인에 있는 carolphilips라는 이름의 사용자에 대한 할당량 정보는 어떻게 얻을 수 있을까요? 이렇게 하려면 kenmyercarolphilips로 대체하고 fabrikamcontoso로 대체하기만 하면 됩니다.

Set colQuotas = objWMIService.ExecQuery _
    ("Select * From Win32_DiskQuota Where " & _
        "User='Win32_Account.Domain=""contoso"",Name=""carolphilips""'")

스크립트의 나머지는 여러 속성의 값을 출력하는 간단한 내용입니다. 한 가지 중요한 것은 Status 속성에서 반환된 숫자 값을 읽을 수 있는 문자열로 변환하는 Select Case 문입니다. 예를 들어, Status에서 2를 반환하면 스크립트가 이 숫자를 Quota exceeded라는 문자열로 변환합니다. 여기에 더해 모든 할당량 값을 1024로 나누어서 킬로바이트로 반환된 값을 메가바이트로 변환할 수 있습니다.

이 스크립트는 컴퓨터에 있는 모든 드라이브에서 kenmyer의 할당량 정보를 반환합니다. 만일 하나의 드라이브에 대한 할당량 정보만 보려면 어떻게 해야 할까요? 이것도 흥미로운 질문인데, 결론적으로 가능하긴 하지만 QuotaVolume 속성이 또 다른 참조 속성이 되기 때문에 WQL 쿼리가 더욱 복잡해집니다.

Set objQuota = objWMIService.Get _
    ("Win32_DiskQuota.QuotaVolume='Win32_LogicalDisk.DeviceID=""C:""'," & _
        "User='Win32_Account.Domain=""tomservo"",Name=""Administrators""'")

다른 드라이브에 대한 정보를 가져오려면 위의 쿼리를 복사한 다음 C:를해당 드라이브 문자로 대체하면 됩니다.

물론 이 스크립트는 Windows XP와 Windows 2003에서는 잘 작동하지만 Win32_DiskQuota 클래스가 Windows 2000에서 지원되지 않기 때문에 Windows 2000에서는 효과적이지 않습니다. 또한 Windows NT 4.0 또는 Windows 98이 디스크 할당량 및 기간을 지원하지 않기 때문에 이 버전의 Windows에서도 Win32_DiskQuota 클래스가 전혀 지원되지 않거나 부분적으로 지원되지 않습니다. 그렇다면 Windows 2000 컴퓨터에 디스크 할당량 정보를 가져오려면 어떻게 해야 할까요?

이 경우에는 아래의 스크립트를 사용할 수 있습니다. 이 스크립트는 Shell 개체를 이용하여 C: 드라이브에서 kenmyer의 디스크 할당량 정보를 가져옵니다.

Set colDiskQuotas = CreateObject("Microsoft.DiskQuota.1")
colDiskQuotas.Initialize "C:\", true
Set objUser = colDiskQuotas.FindUser("fabrikam\kenmyer")
Wscript.Echo "Logon name: " & objUser.LogonName
Wscript.Echo "Quota limit: " & objUser.QuotaLimit
Wscript.Echo "Quota threshold: " & objUser.QuotaThreshold
Wscript.Echo "Quota used: " & objUser.QuotaUsed

이 스크립트는 그다지 길지 않고 큰따옴표도 많이 사용하지 않아 깔끔해 보입니다. 하지만 Windows XP 나 Windows 2003에서는 이 스크립트를 사용하지 않는 것이 좋습니다. 원한다면 사용할 수도 있겠지만 Shell 개체를 사용하여 디스크 할당량 정보를 가져올 때는 두 가지 문제가 있습니다. 첫째, Shell 개체는 WMI 스크립트와는 달리 로컬 컴퓨터에 대해서만 실행되므로 원격 컴퓨터에 연결하여 디스크 할당량 정보를 반환할 수 없습니다.

둘째, 한 번에 하나의 디스크에 대해서만 할당량 정보를 가져올 수 있습니다. WMI를 사용하는 경우 컴퓨터에 있는 모든 드라이브에 대한 디스크 정보를 포함하는 컬렉션을 반환할 수 있지만, Shell 개체를 사용하는 경우 C: 드라이브에서 데이터를 가져오기 위한 코드를 작성한 다음 D: 드라이브에서 데이터를 가져오기 위한 코드를 작성하고 다시 E: 드라이브에서 데이터를 가져오기 위한 코드를 계속 작성해야 합니다.


자세한 정보

자세한 내용은 안녕하세요, Scripting Guy! - Archive  를 참조하십시오.

페이지 맨 위로 페이지 맨 위로

최종수정일 : 2005년 6월 22일