Centrum skryptów - Systemy operacyjne

W jaki sposób pobrać informację o przydziale dysku dla pojedynczego użytkownika? Udostępnij na: Facebook

Skrypciarze odpowiadają na Wasze pytania

Cześć Skrypciarze!

Witamy w rubryce TechNet, w której Skrypciarze z firmy Microsoft odpowiadają na częste pytania dotyczące używania skryptów w administracji systemu. Jeśli macie jakieś pytania z tej dziedziny, zachęcamy do wysłania e-maila na adres: scripter@microsoft.com. Nie możemy zagwarantować odpowiedzi na każde otrzymane pytanie, ale staramy się jak możemy.

W jaki sposób pobrać informację o przydziale dysku dla pojedynczego użytkownika?

Cześć Skrypciarzu! W jaki sposób mogę pobrać informację o przydziale dysku dla pojedynczego użytkownika?

-- AB

Cześć AB! Istnieje kilka sposobów na uzyskanie informacji o przydziale dysku dla pojedynczego użytkownika, w zależności od tego, którą wersję Windows masz zainstalowaną na komputerze. Jeśli pracujesz na Windows XP lub Windows 2003, możesz pobrać informację o przydziale dysku dla użytkownika przy pomocy klasy Win32_DiskQuota. Poniżej masz przykładowy skrypt, który pobiera informację o przydziale dysku dla użytkownika 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

No dobrze, kwerenda WQL jest trochę pokręcone (uważaj na podwójne cudzysłowy!), ale tak właśnie zaprojektowano klasę Win32_DiskQuota: właściwość User (użytkownik) jest właściwością referencyjną, wskazującą inny obiekt i klasę (w tym wypadku klasę Win32_Account). Choć urodą nie grzeszy, to na szczęście jest łatwy w obsłudze.

A jeśli chcielibyśmy uzyskać informację o przydziale dla użytkownika o nazwie carolphilips, którego konto znajduje się w domenie contoso? Nic trudnego; wystarczy w miejsce kenmyer wstawić carolphilips, a fabrikam zamienić na contoso.

Set colQuotas = objWMIService.ExecQuery _

    ("Select * From Win32_DiskQuota Where " & _

        "User='Win32_Account.Domain=""contoso"",Name=""carolphilips""'")

Przynajmniej pozostała część skryptu jest stosunkowo prosta; wywołujemy po prostu echo wartości różnych właściwości. Jedyny haczyk to instrukcja Select Case, która zwróconą przez właściwość Status wartość numeryczną konwertuje na ciąg do odczytu. Na przykład, jeżeli wartość Status wynosi 2, skrypt przekonwertuje ją na ciąg Quota exceeded (Przydział przekroczony). Informacje zwracane są w kilobajtach, więc możecie podzielić je przez 1024, dzięki czemu przydział będzie wyrażony w megabajtach.

Tak się składa, że skrypt zwraca informację o przydziale na wszystkich dyskach użytkownika kenmyer. Co jeśli będziesz chciał informacji o przydziale na pojedynczym dysku? Ha, musiałeś o to zapytać, prawda? To się da zrobić, z tym, że kwerenda WQL będzie wyglądała jeszcze dziwniej. Wszystko przez to, że właściwość QuotaVolume jest kolejną właściwością referencyjną:

Set objQuota = objWMIService.Get _

    ("Win32_DiskQuota.QuotaVolume='Win32_LogicalDisk.DeviceID=""C:""'," & _

        "User='Win32_Account.Domain=""tomservo"",Name=""Administrators""'")

Jeśli chcesz uzyskać informację o innym dysku, skopiuj powyższą kwerendę i zmień C: na stosowną literę określającą dysk.

O ile jednak ten skrypt działa bez zarzutu na Windows XP i Windows 2003, to w środowisku Windows 2000 nie będzie z niego wielkiego pożytku; Windows 2000 po prostu nie obsługuje klasy Win32_DiskQuota (skrypt nie zadziała również na Windows NT 4.0, ani na Windows 98, po części dlatego, że te wersje Windows nie obsługują przydziału dysku). Co zatem, jeśli potrzebujesz informacji o przydziale dysku na komputerze z Windows 2000? Cóż, w takim wypadku użyj skryptu, który wykorzystuje obiekt Shell (powłoka), aby uzyskać informację o przydziale dysku C: na lokalnym komputerze dla użytkownika 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

Jak widzisz, ten skrypt jest krótszy i bardziej elegancki. Dlaczego więc nie polecamy Ci używania tego skryptu również w środowisku Windows XP i Windows 2003? Jeśli chcesz to proszę bardzo. Istnieją jednakże dwa ograniczenia dotyczące pobierania informacji o przydziale dysku przy pomocy obiektu Shell. Po pierwsze, obiekt ten działa tylko na komputerze lokalnym; w przeciwieństwie do skryptu WMI, Shell nie pozwala na połączenie się z komputerem zdalnym i pobranie informacji o przydziale dysku.

Po drugie, używając obiektu Shell możesz pobierać informację o przydziale tylko jednego dysku na raz. WMI pozwala na uzyskanie kolekcji zawierającej informacje o przydziale wszystkich dysków na komputerze. Pracując z obiektem Shell będziesz musiał napisać kod, aby uzyskać dane z dysku C:, następnie napisać kod, aby uzyskać dane z dysku E: i tak dalej.

 Do początku strony Do początku strony


Centrum skryptów - Systemy operacyjne