成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

在 Windows Server 2003 和 Windows XP 中管理磁盤配額

系統 Windows
本文概述 Windows Server 2003 和 Windows XP 中提供的新功能,可以使用這些功能來編寫腳本以管理整個企業中的磁盤配額和磁盤配額設置。

概述 Windows Server 2003 和 Windows XP 中提供的新功能,可以使用這些功能來編寫腳本以管理整個企業中的磁盤配額和磁盤配額設置。

磁盤配額簡史

每次聽到一句古老的諺語,通常都會很容易體會到它的忠告中所蘊含的一絲一毫的真理。三思而后行?的確有道理。笨人難聚財?等一下,讓我們看看“腳本專家”的預算。可不是嗎?沒什么好爭辯的。捷足先登?我們恐怕只能對它信以為真。不過聽上去還是蠻有說服力的。

但還有這樣一句:許愿須當心,實現恐添憂。什么?毫無道理嘛。既然得償所愿,又怎么會憑添煩憂呢?看到了吧:顯然即便是古語的作者也有不靈光的時候。(這離解釋清楚“魚與熊掌不可兼得”這句古語的含義還差得遠呢。)

事實證明,使用 Windows 2000 之前版本的系統管理員對那句“許愿須當心...”古語的含義有著深刻的認識。回顧 Windows NT 時代,磁盤配額是每一位系統管理員最需要的功能之一,而 Windows NT 并不支持該功能。猜一猜發布 Windows 2000 時會發生什么情況?那還用說嘛,Microsoft 當然唯您的馬首是瞻:Windows 2000 內置(在 NTFS 卷上)對磁盤配額的完整支持。就如另一句古語所說的一樣:“求即得之”。

那么問題出在哪里呢?需要明確的是,磁盤配額自身并無任何問題,它們所發揮的作用與廣告中所宣傳的別無二致。問題出在,盡管系統管理員現在擁有了聽憑其支配的功能強大的新工具,但著實缺乏能夠有效管理該工具的方法。他們只能以驅動器為單位來管理磁盤配額,而無法以簡便的方式了解計算機上的總體磁盤配額使用情況(即涵蓋計算機上所有驅動器的配額使用情況)。不僅如此:

而且還無法生成磁盤配額報告。

盡管可以管理遠程計算機上的磁盤配額,卻只能通過略為難解的方法來實現。

由于腳本編寫選項只能在本地計算機上的單個驅動器中使用,因此會受到相同程度的限制。(順便提一句,如果對在 Windows 2000 中使用腳本來管理磁盤配額感興趣,請參見 Microsoft Windows 2000 Scripting Guide(Microsoft Windows 2000 腳本指南)中的“Managing Disk Quotas”(管理磁盤配額)。

換言之,系統管理員得到的正是他們所希望得到的功能:磁盤配額。問題是他們沒有表達同時想獲得磁盤配額管理工具的愿望。在 Windows 2000 中,磁盤配額曾經是(現在也仍然是)一個非常有用的工具,但由于缺少管理工具而很難管理整個企業中的磁盤配額。

但要知道有這樣一句話:好事多磨。磁盤配額似乎就是這種情況。Windows 2000 為系統管理員提供了磁盤配額功能,但就管理整個企業中的配額使用情況而言,并沒有太大的幫助。在 Windows Server 2003(和 Windows XP)中,這種情況已有所改觀。現在,您可以方便地管理整個企業中的磁盤配額。這是因為,Windows Server 2003 和 Windows XP 中新增了兩個用于管理磁盤配額和磁盤配額設置的 WMI 類。

本文將詳細介紹這兩個 WMI 類并提供多個示例腳本,說明如何使用這些類來執行各種管理任務。不過,在介紹上述內容之前,我們需要插入一小段內容,簡要介紹一下磁盤配額所基于的技術。

#p#

磁盤配額如何工作

磁盤配額是 NTFS 文件系統不可缺少的一個部分。每當在 NTFS 卷上創建文件(或文件夾)時,系統就會為該文件或文件夾指定所有者(通常是最初創建該文件或文件夾的用戶)。在實際保存該文件之前,NTFS 會獲取文件所有者的用戶 ID,并將該信息存儲在文件的“標準信息”屬性(計算磁盤空間分配時將使用該屬性)中。隨后,NTFS 查找該用戶的磁盤配額項,確定新分配的磁盤空間是否會導致該用戶超出分配的配額。如果超出,NTFS 將采取相應的措施,這可能包括在系統事件日志中記錄一項內容,或禁止用戶創建文件或文件夾。文件大小發生變化時,NTFS 會更新磁盤配額項來反映用戶所使用的總磁盤空間。所有上述操作都是在后臺執行的,而且速度非常快,您根本察覺不到。

要想有效地管理磁盤配額,一定要知道配額不是以計算機為單位進行配置的。實際上,磁盤配額與各個 NTFS 卷相關聯。每個驅動器具有不同的配額設置,對一個卷執行的操作不會影響其他卷。例如,一臺計算機可能有一個硬盤,并被劃分為三個卷:驅動器 C、D 和 E。每個驅動器具有不同的配額設置。可以在驅動器 C 和 D 上啟用磁盤配額,而在驅動器 E 上禁用磁盤配額。同樣,可以在驅動器 C 上為用戶分配 50 MB 的磁盤空間,而在驅動器 D 上分配 100 MB 的磁盤空間。

換言之,在管理磁盤配額時,對一個卷執行的操作不會對其他卷產生任何影響。如果在驅動器 C 上為用戶 A 分配了 50 MB 的磁盤空間,并不表示在驅動器 D 和 E 上也為用戶 A 分配 50 MB 的磁盤空間。如果在驅動器 D 上禁用了磁盤配額,驅動器 C 和 E 上的配額仍保持啟用狀態。如果您...好了,就是這個意思。還要記住一點,也可以用戶為單位來配置磁盤配額,本文后面將對此進行更詳盡的介紹。

除分配磁盤空間外,還可以指定配額警告級別,即觸發警報(在系統事件日志中記錄的一種事件,用于通知用戶已接近配額)的磁盤空間使用量。也可以確定用戶超過配額時系統所執行的操作:

不執行任何操作。

在系統事件日志中記錄事件。

拒絕授予用戶存儲更多數據的權限,直到他/她刪除了足夠多的文件以恢復到配額限制內為止。

WMI 包含兩個用于在 NTFS 驅動器上管理磁盤配額的類。“Win32_QuotaSetting”類用于為每個驅動器配置配額設置;其中包括是否在驅動器上啟用配額以及對新用戶應用的默認配額和警告限制等設置。而“Win32_DiskQuota”類用于管理各個配額項:它用于對各個用戶的配額項執行枚舉、創建、修改和刪除操作。只需使用這兩個類,就幾乎可以完成能夠想到的所有磁盤配額管理任務。

#p#

用于管理磁盤配額的設置

如果您沒有閱讀前面講解部分的內容,我們在這里再講解一次:Win32_QuotaSetting 類用于確定是否(為計算機上的某個或所有驅動器)啟用配額、為驅動器配置的默認配額和警告限制以及用戶超過其配額時將執行的管理操作(如果有)等事項。Win32_QuotaSetting 包含的屬性如下表所示。除“VolumePath”以外的所有其他屬性都是讀/寫屬性,即您并不僅限于報告這些屬性的現有值。實際上,您可以使用腳本來修改這些屬性的值。

屬性

說明

DefaultLimit

此特定卷上的默認配額限制 (KB)。

DefaultWarningLimit

此特定卷上的默認配額警告限制 (KB)。

ExceededNotification

指定用戶超出配額時,是否在事件日志中寫入事件。(True/False)

State

此特定卷的配額管理級別。值如下:
0:不在此卷上啟用配額管理。
1:跟蹤配額,但不強制執行限制值,用戶可以超過配額。
2:在此卷上跟蹤并強制執行配額。

VolumePath

包含磁盤配額的卷的名稱。可以是卷名稱或卷路徑(如 D:\\)。使用路徑時,需要包含兩個反斜杠 (\\)。

WarningExceededNotification

指定超出警告限制時,是否在事件日志中寫入事件。(True/False)

還可以將這些相同屬性映射到 NTFS 驅動器“屬性”對話框中的用戶界面元素:

imageFile

那么,到底可以使用 Win32_QuotaSetting 完成哪些任務呢?可能最常見的任務就是連接到計算機,并確定計算機的 NTFS 卷上是否已啟用了磁盤配額(如果啟用了,則確定配額設置的配置情況)。要返回計算機的配額設置信息,只需綁定到 Win32_QuotaSetting 類,然后回顯每個屬性的值:

strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")

Set colQuotaSettings = objWMIService.ExecQuery _
    ("Select * from Win32_QuotaSetting")

For Each objQuotaSetting in colQuotaSettings Wscript.Echo "Default Limit: " & objQuotaSetting.DefaultLimit Wscript.Echo "Default Warning Limit: " & _ objQuotaSetting.DefaultWarningLimit Wscript.Echo "Exceeded Notification: " & _ objQuotaSetting.ExceededNotification Wscript.Echo "State: " & objQuotaSetting.State Wscript.Echo "Volume Path: " & objQuotaSetting.VolumePath Wscript.Echo "Warning Exceeded Notification: " & _ objQuotaSetting.WarningExceededNotification Next

以上腳本返回計算機上所有 NTFS 卷的配額設置信息。倘若只需要有關驅動器 D 的配額設置信息,該怎么辦呢?如果是這樣,只需在 WQL 查詢中添加一個 WHERE 子句即可,它用于限定只返回驅動器 D 的數據:

strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")

Set colQuotaSettings = objWMIService.ExecQuery _
    ("Select * from Win32_QuotaSetting Where VolumePath = 'D:\\'")

For Each objQuotaSetting in colQuotaSettings Wscript.Echo "Default Limit: " & objQuotaSetting.DefaultLimit Wscript.Echo "Default Warning Limit: " & _ objQuotaSetting.DefaultWarningLimit Wscript.Echo "Exceeded Notification: " & _ objQuotaSetting.ExceededNotification Wscript.Echo "State: " & objQuotaSetting.State Wscript.Echo "Volume Path: " & objQuotaSetting.VolumePath Wscript.Echo "Warning Exceeded Notification: " & _ objQuotaSetting.WarningExceededNotification Next

請注意,在指定驅動器 D 時,必須包含額外一個斜杠,即“D:\\”。因為 \ 是 WMI 中的保留字符,所以每次在 WHERE 子句中使用它時,都必須將其“轉義”(在它的前面添加一個斜杠)。

#p#

啟用和禁用磁盤配額

Win32_QuotaSetting 簡化了磁盤配額的啟用和禁用操作;使用 WMI 腳本來執行這些任務特別有用,因為在遠程計算機上執行腳本與在本地計算機上執行腳本一樣簡便。腳本也是一種很好的磁盤配額管理方法,因為它具有以下靈活性:可以只為一個卷啟用磁盤配額,也可以為計算機上的所有卷都啟用磁盤配額。做何選擇完全取決于您。

可通過處理“State”屬性的值來打開或關閉磁盤配額。State 接受以下三個可能的值:

0:關閉磁盤配額。

1:跟蹤磁盤配額,但不強制執行磁盤配額。換言之,操作系統將跟蹤配額信息,但允許用戶隨意超出其配額限制。

2:跟蹤并強制執行磁盤配額。在這種情況下,不允許用戶超出其磁盤配額;如果用戶試圖保存文件,則會導致超出其配額限制,但由于磁盤空間不足而被拒絕訪問。

以下腳本將計算機配置為跟蹤并強制執行計算機上的驅動器 C 的磁盤配額:

Const ENFORCE_QUOTAS = 2

strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colDisks = objWMIService.ExecQuery _
    ("Select * from Win32_QuotaSetting Where VolumePath = 'C:\\'")

For Each objDisk in colDisks objDisk.State = ENFORCE_QUOTAS objDisk.Put_ Next

該腳本先是定義一個常量“ENFORCE_QUOTAS”并為其分配值 2,然后連接到 WMI 服務,并使用以下這行代碼來檢索驅動器 C 的配額設置:

Set colDisks = objWMIService.ExecQuery _
    ("Select * from Win32_QuotaSetting Where VolumePath = 'C:\\'")

為啟用配額,此腳本將“State”屬性的值設置為 ENFORCE_QUOTAS,然后調用“Put_”方法將此更改寫入操作系統。

如果要在某個驅動器上禁用磁盤配額,該怎么辦呢?在這種情況下,只需將“State”屬性的值設置為 0 即可。為此,請創建一個名為 DISABLE_QUOTAS 的常量,將該常量的值設置為 0,然后將 State 屬性的值設置為 DISABLE_QUOTAS。編寫完的腳本與以下內容極為相似:

Const DISABLE_QUOTAS = 0
 
StrComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colDisks = objWMIService.ExecQuery _
    ("Select * from Win32_QuotaSetting Where VolumePath = 'C:\\'")

For Each objDisk in colDisks objDisk.State = DISABLE_QUOTAS objDisk.Put_ Next

請注意,禁用磁盤配額時,不會丟棄現有的配額信息。例如,進行的任何配額設置或創建的任何配額項仍會存在。不過,不會強制執行這些設置,也不會更新具有配額項的每個用戶的磁盤空間使用情況。如果后來重新啟用了磁盤配額,則會自動恢復先前的設置和配額項,而不必重新創建它們。就像我們這些“腳本專家”喜歡說的:儉則不匱。

#p#

修改磁盤配額設置

Win32_QuotaSetting 類的優點之一是,它的大部分屬性都是讀/寫屬性;換言之,不但可以使用腳本來檢索 DefaultLimit 和 DefaultWarningLimit 等屬性的值,而且還可以使用腳本來修改這些屬性值。

例如,以下腳本修改計算機上所有 NTFS 驅動器的 DefaultLimit 和 DefaultWarningLimit 設置:

strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")

Set colQuotaSettings = objWMIService.ExecQuery _
    ("Select * from Win32_QuotaSetting")

For Each objQuotaSetting in colQuotaSettings objQuotaSetting.DefaultLimit = 10000000 objQuotaSetting.DefaultWarningLimit = 9000000 objQuotaSetting.Put_ Next

如以上所示,只需分配一個新值 (KB),然后調用“Put_”方法,將這些新的配額設置寫入操作系統。請注意,執行此操作時,修改過的配額設置只應用于新用戶;新設置不會應用于在該驅動器上已有磁盤配額項的用戶。例如,假設有三個用戶在驅動器上擁有磁盤配額項:

用戶

配額限制

警告限制

KMyer

100 MB

90 MB

PAckerman

200 MB

180 MB

RWilliams

400 MB

350 MB

假設運行一個腳本,對默認配額設置進行如下更改:將配額限制更改為 50 MB,將警告限制更改為 40 MB。這些值將應用于在該驅動器上保存文件或創建文件夾的所有新用戶。不過,上表中所示的三個用戶的配額設置不會受到影響;即使他們的配額限制遠高于規定的最大值 50 MB,其現有設置也會保持不變。但這也沒關系:畢竟,配額設置是將應用于所有新用戶的默認值(除非另行指定)。換言之,完全允許個別用戶的配額設置高于或低于默認值。

但如果真的要將同樣的值應用于這三個用戶,該怎么辦呢?在這種情況下,必須更改每個用戶各自配額項的值。恰好,下一部分就要討論這方面的內容。

#p#

管理單個用戶的磁盤配額項

每次新用戶在啟用了磁盤配額的驅動器上保存文件時,系統就會為該用戶創建一個配額項。該配額項跟蹤為該用戶指定的配額和警告限制以及該用戶當前占用的磁盤空間大小。事實上,配額項與 WMI 類“Win32_DiskQuota”極其相似,可以使用該類來創建、刪除、修改以及報告單個配額項。Win32_DiskQuota 類的屬性如下表所示:

屬性

說明

DiskSpaceUsed

此特定用戶當前使用的磁盤空間 (KB)。

Limit

為此特定用戶設置的限制。此屬性是讀/寫屬性。

QuotaVolume

存儲配額項的卷。

Status

磁盤配額的當前狀態。值如下:
0。正常:用戶在其配額限制內。
1。警告:用戶已超出警告限制,但尚未超出其配額限制。
2。超出:用戶超出了其配額限制。

User

與配額項關聯的用戶。

WarningLimit

為此特定用戶設置的警告限制。此屬性是讀/寫屬性。

還可以將這些屬性映射到“配額項”對話框中的用戶界面元素:

imageFile 

附注。如何找到“配額項”對話框呢?在“我的電腦”文件夾中,右鍵單擊所需的磁盤驅動器,然后單擊“屬性”。在“屬性”對話框中,單擊“配額”選項卡,然后單擊“配額項”。

如果您尚不清楚磁盤配額的應用范圍,在此說明一下,它應用于用戶所擁有的文件和文件夾。(順便說一句,文件和文件夾只能歸用戶所有,而不能歸組所有,這就是只能為用戶指定磁盤配額的原因,但有一種例外情況。)以下是另外幾條值得注意的說明:

磁盤配額基于文件所有權。假設用戶 A 創建了一個不包含任何內容的新文件。用戶 A 因而占用 0 MB 的磁盤空間。不過,假設用戶 B(擁有該文件的讀/寫訪問權限)打開了該文件,并在其中填滿了從 Internet 下載的圖片。文件大小將增長到 40 MB,所有這些空間都算作用戶 A(文件所有者)占用的空間。
當然,某些應用程序會自動將文件的所有者更改為上次修改文件的用戶。在這種情況下,40 MB 的磁盤空間將算作用戶 B 占用的空間,而唯一的原因是用戶 B 現在是文件的所有者。

磁盤配額基于未壓縮的文件大小。文件壓縮并不會改變文件所有者占用的磁盤空間大小。(是啊,我們知道:我們希望自己能夠做到,但沒有效果。)

磁盤配額難以捉摸:啟用配額時,向用戶報告的可用空間基于其配額限制,而不是驅動器大小。例如,假設在一個 50 GB 的驅動器上為用戶分配了 1 GB 的配額空間。如果用戶立即檢查驅動器上的可用空間大小,將被告知有 1 GB 的可用空間,即基于其配額的可用空間大小。用戶并不知道驅動器上的其他 49 GB 磁盤空間。

默認情況下,管理員擁有的驅動器磁盤空間大小不受限制(當然啦,要受實際磁盤空間大小的限制);事實上,啟用磁盤配額時,將在配額項表中自動添加 Administrators 組并為其分配不限大小的磁盤空間。最好不要更改此默認值。如果將 Administrators 組從配額項表中刪除,或限制管理員可以使用的磁盤空間大小,則可能會大大削弱您管理計算機的能力。

附注。由管理員創建的任何文件均歸 Administrators 組所有,而非歸個別管理員所有。這便是我們在前面提到的那個例外。可以為 Administrators 組配置磁盤配額項,但不能為任何其他組配置磁盤配額項。(沒錯,這的確不公平。但看一看我們的《古語類編》,根本找不到包含“生活是公平的”內容的古語。)
 
前面我們講過,在 Windows 2000 中實現磁盤配額的主要障礙之一是缺少有用的管理工具。例如,假設要生成一份報告,顯示計算機上所有驅動器的所有磁盤配額項。在 Windows 2000 中,沒有簡便的實現方法。其一,干脆不要考慮使用“磁盤配額項”實用工具,因為無法使用該工具來打印信息,甚至無法將數據保存到文本文件中。其二,盡管可以編寫使用“Shell”對象的腳本,但需要包含大量的代碼,其目的僅僅是為了識別和連接到計算機上的所有驅動器。真麻煩,或許并不值得這樣做。(讓那句“不勞無獲”見鬼去吧。)

那么在 Windows 2003 中實現起來是否會容易一些呢?以下是專用于實現該目的的腳本:它返回計算機上所有驅動器的所有配額項的相關信息,只通過幾行代碼就實現了該目的:

strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")

Set colDiskQuotas = objWMIService.ExecQuery("Select * from Win32_DiskQuota") For Each objQuota in colDiskQuotas Wscript.Echo "Disk Space Used: " & objQuota.DiskSpaceUsed Wscript.Echo "Limit: " & objQuota.Limit Wscript.Echo "Quota Volume: " & objQuota.QuotaVolume Wscript.Echo "Status: " & objQuota.Status Wscript.Echo "User: " & objQuota.User Wscript.Echo "Warning Limit: " & objQuota.WarningLimit Wscript.Echo Next

不錯,是吧?但還可以變得更好。因為這是 WMI,所以可以創建一些查詢,以便返回一組更具體的信息。例如,可能需要獲得超出配額限制的所有用戶(即“Status”屬性值為 2 的所有配額項)的集合。如果是這樣,只需使用類似于以下內容的 WQL 查詢:

Set colDiskQuotas = objWMIService.ExecQuery _
    ("Select * from Win32_DiskQuota Where Status = 2")

以下是另一個示例查詢,它返回占用的磁盤空間超過 1,000,000 KB 的所有用戶(不考慮其配額設置)的列表:

Set colDiskQuotas = objWMIService.ExecQuery _
    ("Select * from Win32_DiskQuota Where DiskSpaceUsed > 1000000")

以上代碼再次證明,在管理像磁盤配額這樣的內容方面,腳本是一種非常好的方法。只需花費相對較少的時間,就可以創建一個完全按照預期方式工作的管理工具。

順便提一句,用戶達到其配額級別時,將在發生配額沖突的計算機上的系統事件日志中記錄一個事件。不過,不會向用戶發出任何種類的通知。用戶根本不知道他/她已接近其配額限制,直到他們嘗試保存文件,但由于磁盤空間不足而被拒絕訪問時,才會意識到這種情況。

為什么要提到這一點呢?因為您可以輕松編寫一個腳本以返回超出警告限制或配額限制的用戶列表,然后讓該腳本向每個用戶發送電子郵件,通知他們出現的情況,可能還會提供有關如何釋放更多磁盤空間的建議。請嘗試利用操作系統內置的磁盤配額管理工具來實現該目的。

#p#

檢索單個磁盤配額項

至此可以明顯地看出,Windows Server 2003 和 Windows XP 中新增的 WMI 類可簡化對磁盤配額設置與配額項的總體管理(即對計算機上所有驅動器的磁盤配額設置與配額項進行管理)。不過,也可以對各個配額項進行管理。例如,以下腳本(我們得承認,看上去有點兒嚇人)檢索用戶 fabrikam\kenmyer 在計算機驅動器 C 上的配額限制:

strComputer = "."

strDrive = "C:"
strDomain = "fabrikam"
strUser = "kenmyer"

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")

Set objQuota = objWMIService.Get _
    ("Win32_DiskQuota.QuotaVolume='Win32_LogicalDisk.DeviceID=" & chr(34) & strDrive & chr(34) & "'," & _
        "User='Win32_Account.Domain=" & chr(34) & strDomain & chr(34) & _
            ",Name=" & chr(34) & strUser & chr(34) & "'")

Wscript.Echo objQuota.Limit

事實上,腳本的大部分內容非常淺顯易懂,但有一個明顯的例外情況:用于檢索配額項的 WQL 查詢。您可能注意到了,該查詢滿是 & 號、單引號、雙引號及各種標點。看上去不太雅觀(盡管古語有云,情人眼里出西施),但這正是 WMI 跟蹤各個配額項的方式。例如,以下是 Wbemtest 中配額項實例的外觀:

imageFile 

換言之,不論好壞(是的,情況可能會變得很糟),磁盤配額項的鍵屬性都是“Win32_DiskQuota”、“Win32_LogicalDisk”及“Win32_Account”類的組合,而且這種情況根本無法避免。

但不必為此擔心。以上腳本在設計時考慮了如何更簡便地進行修改和使用。WQL 查詢顯得如此神秘的部分原因是,我們使用了變量來表示驅動器、用戶及用戶域。要使用該腳本,只需給表示這些屬性的三個變量分配相應的值即可:

strDrive = "C:"
strDomain = "fabrikam"
strUser = "kenmyer"

修改磁盤配額項

Limit 和 WarningLimit 屬性都是讀/寫屬性:這意味著,可以使用腳本來修改其中任何一個屬性的值。例如,以下腳本修改用戶 fabrikam\kenmyer 的驅動器 C“Limit”值:

strComputer = "."
 
strDrive = "C:"
strDomain = "fabrikam"
strUser = "kenmyer"
 
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
 
Set objQuota = objWMIService.Get _
    ("Win32_DiskQuota.QuotaVolume='Win32_LogicalDisk.DeviceID=" & chr(34) & strDrive & chr(34) & "'," & _
        "User='Win32_Account.Domain=" & chr(34) & strDomain & chr(34) & _
            ",Name=" & chr(34) & strUser & chr(34) & "'")

objQuota.Limit = 11111111 objQuota.Put_

同往常一樣,應確保在分配新值后調用“Put_”方法。如果不調用 Put_,并不會生成任何錯誤,但也不會對配額項進行任何更改。

當然,也可以更改驅動器上所有用戶的“Limit”。下面的腳本正好可以實現此目的:

strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")

Set colDiskQuotas = objWMIService.ExecQuery _
    ("Select * from Win32_DiskQuota Where QuotaVolume = 'C:\\'")

For Each objQuota in colDiskQuotas objQuota.Limit = 11111111 objQuota.Put_ Next

#p#

刪除磁盤配額項

有時,磁盤配額管理僅僅是求解簡單的數學等式。例如,假設有 100 個用戶和 100 GB 的可用磁盤空間。只要您愿意,完全可以將可用磁盤空間大小除以用戶數,因而為每個用戶分配 1 GB 的磁盤空間。

當然,只有在相關數字有效時,這種計算才有用處。如果實際上有 50 個用戶,則可能為每個用戶少分配了磁盤空間;如果有 200 個用戶,則分配的磁盤空間超過實際存在的磁盤空間。因此,需要密切注意驅動器的可用磁盤空間大小和配額項數。要完成后一項任務,需要經常刪除無效的配額項,例如,組織中不再存在的用戶或不再具有驅動器訪問權限的用戶的配額項。(您需要手動完成此項任務,因為每次刪除用戶帳戶時并不會自動刪除配額項。)所幸的是,這是另一項可以使用腳本來執行的任務。

要刪除配額項,只需連接到該項,然后調用“Delete_”方法;甚至不必調用 Put_,即可將更改寫入操作系統。在調用 Delete_ 時,即會刪除配額項。

以下腳本刪除用戶 fabrikam\kenmyer 在驅動器 C 上的配額項:

strComputer = "."
 
strDrive = "C:"
strDomain = "fabrikam"
strUser = "kenmyer"
 
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
 
Set objQuota = objWMIService.Get _
    ("Win32_DiskQuota.QuotaVolume='Win32_LogicalDisk.DeviceID=" & chr(34) & strDrive & chr(34) & "'," & _
        "User='Win32_Account.Domain=" & chr(34) & strDomain & chr(34) & _
            ",Name=" & chr(34) & strUser & chr(34) & "'")
  objQuota.Delete_

請記住,刪除配額項不會影響用戶在驅動器上存儲文件的能力。假設您刪除了 Ken Myer 的配額項,而后不久 Ken 嘗試在該驅動器上存儲文件。是否會拒絕 Ken 訪問該驅動器呢?不會。他可以保存文件,系統將為他創建一個全新的配額項。如果要禁止用戶在驅動器上保存文件,則必須使用 NTFS 權限,而不是磁盤配額。

還要記住,如果任何用戶仍是驅動器上文件的所有者,就無法刪除其配額項。要刪除配額項,必須先刪除這些文件,移動這些文件或取得這些文件的所有權。

創建新的磁盤配額項

如上所述,不必為可能在驅動器中保存文件的每個新用戶創建新的配額項。這便是默認配額及默認警告限制存在的原因。用戶保存文件時,操作系統會查找用戶及其配額設置。如果用戶尚無配額項,操作系統會根據默認設置自動創建一個新的配額項。這大大簡化了磁盤配額管理。

不過,您有時可能不想對用戶應用這些默認設置。例如,您可能希望給美工分配較多的磁盤空間,而給接待員分配較少的磁盤空間。在與此類似的情況下,可以等到美工在磁盤上保存文件,并因而根據默認設置生成新的配額項,然后再使用腳本修改這些設置。也可以事先使用腳本創建一個配額項,從一開始就為該用戶分配更多的磁盤空間,這樣可能會節約一些時間,省卻一些麻煩。

這里再先給您提個醒:用于創建新配額項的腳本看上去有點兒古怪。不過,示例腳本在設計時也考慮了使用簡便性:您只需為驅動器、用戶名和域分配相應的值,即可照搬使用此腳本。

strComputer = "."

strDrive = "C:"
strDomain = "fabrikam"
strUser = "kenmyer"

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")

Set objAccount = objWMIService.Get _
    ("Win32_Account.Domain='" & strDomain & "',Name='" & strUser & "'")
Set objDisk = objWMIService.Get _
    ("Win32_LogicalDisk.DeviceID='" & strDrive & "'")
Set objQuota = objWMIService.Get _
    ("Win32_DiskQuota").SpawnInstance_

objQuota.QuotaVolume = objDisk.Path_.RelPath objQuota.User = objAccount.Path_.RelPath objQuota.Limit = 10485760 objQuota.WarningLimit = 8388608 objQuota.Put_

是啊,我們知道:此腳本比我們一直使用的腳本略為復雜一些。這在很大程度上是因為,我們需要創建表示用戶帳戶 (objAccount) 和創建配額項時所在的驅動器 (objDisk) 的對象引用。可以使用以下兩行代碼來執行這項操作:

Set objAccount = objWMIService.Get _
    ("Win32_Account.Domain='" & strDomain & "',Name='" & strUser & "'") Set objDisk = objWMIService.Get _ ("Win32_LogicalDisk.DeviceID='" & strDrive & "'")

創建這兩個對象引用后,即可使用“SpawnInstance_”方法來創建空白配額項。然后,只需指定 QuotaVolume、User、Limit 及 WarningLimit 屬性的值即可。此處的難點是,在設置 QuotaVolume 和 User 屬性的值時使用兩個對象引用的 Path_.RelPath 屬性。磁盤驅動器和用戶的 Path_.RelPath 值與以下內容類似:

Win32_LogicalDisk.DeviceID="C:"
Win32_UserAccount.Domain="fabrikam",Name="kenmyer"

使用 Path_.RelPath 屬性是為了圖方便:與使用由令人頭痛的串接字符串(包含各種 & 號、單引號和雙引號)組成的其他屬性相比,使用該屬性略為簡潔一些。

當然,接下來使用 Put_ 方法實際創建配額項。

要知道有這樣一句話:天下無不散之宴席,它同樣適用于本文。如果您在使用腳本來管理磁盤配額方面有什么問題或意見,請將它們發送到 scripter@microsoft.com。同時,我們期望能夠證明那條“魚與熊掌不可兼得”古語是錯誤的。祝我們好運吧。

原文地址

查看更多相關文章

 

責任編輯:yangsai 來源: 微軟TechNet中文站
相關推薦

2011-07-15 16:30:19

WINS

2020-09-27 15:08:29

Windows XPWindows微軟

2013-11-28 13:52:43

微軟Windows XPServer 2003

2012-09-06 16:26:29

2013-07-09 09:14:08

Windows XPOffice 2003

2012-11-15 15:33:27

Windows Ser

2009-03-30 15:52:24

Windows Emb

2009-12-02 13:36:28

2010-05-28 11:02:04

2010-07-26 09:07:32

Windows SerWindows SerLinux

2015-07-14 09:40:33

Windows Ser退役

2011-07-06 08:58:56

2010-04-20 14:06:07

NTFS權限

2020-09-27 10:05:20

Windows 代碼系統

2010-08-30 11:03:48

DHCP服務器Windows 200Windows Ser

2009-06-19 08:31:59

Windows 7微軟操作系統

2010-11-01 06:28:51

2009-09-24 11:02:24

打印服務器

2011-03-02 17:31:39

Pureftpd

2014-09-12 09:32:37

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 天天色天天色 | 亚洲一区中文字幕 | 这里只有精品99re | 狠狠操狠狠色 | 亚洲一区二区三区乱码aⅴ 四虎在线视频 | 青青久久 | 一区二区三区不卡视频 | 99视频免费播放 | 久久精品网 | 日韩欧美在线观看视频 | 一区二区三区免费在线观看 | 久久久婷 | 91免费在线 | 日韩二三区 | 成人免费黄视频 | 欧美最猛性xxxxx亚洲精品 | 91伊人| 99精品国产在热久久 | 久久中文视频 | 国产在线不卡 | 亚洲福利网| 91中文字幕在线观看 | 日韩高清成人 | 男人午夜视频 | 伊人精品一区二区三区 | 人人干人人草 | 久久国产欧美日韩精品 | 欧美日韩在线一区二区三区 | 日韩av在线播 | 草久久久 | 日本一区二区不卡 | 福利视频一区二区 | 亚洲网站观看 | 精品久久久久久亚洲国产800 | 欧美日韩专区 | 精品91久久 | 日本免费在线 | 成人毛片视频在线播放 | 自拍偷拍亚洲视频 | 请别相信他免费喜剧电影在线观看 | 夏同学福利网 |