自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

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

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

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

磁盤配額簡史

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

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

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

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

而且還無法生成磁盤配額報(bào)告。

盡管可以管理遠(yuǎn)程計(jì)算機(jī)上的磁盤配額,卻只能通過略為難解的方法來實(shí)現(xiàn)。

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

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

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

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

#p#

磁盤配額如何工作

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

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

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

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

不執(zhí)行任何操作。

在系統(tǒng)事件日志中記錄事件。

拒絕授予用戶存儲更多數(shù)據(jù)的權(quán)限,直到他/她刪除了足夠多的文件以恢復(fù)到配額限制內(nèi)為止。

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

#p#

用于管理磁盤配額的設(shè)置

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

屬性

說明

DefaultLimit

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

DefaultWarningLimit

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

ExceededNotification

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

State

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

VolumePath

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

WarningExceededNotification

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

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

imageFile

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

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

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

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

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

#p#

啟用和禁用磁盤配額

Win32_QuotaSetting 簡化了磁盤配額的啟用和禁用操作;使用 WMI 腳本來執(zhí)行這些任務(wù)特別有用,因?yàn)樵谶h(yuǎn)程計(jì)算機(jī)上執(zhí)行腳本與在本地計(jì)算機(jī)上執(zhí)行腳本一樣簡便。腳本也是一種很好的磁盤配額管理方法,因?yàn)樗哂幸韵蚂`活性:可以只為一個(gè)卷啟用磁盤配額,也可以為計(jì)算機(jī)上的所有卷都啟用磁盤配額。做何選擇完全取決于您。

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

0:關(guān)閉磁盤配額。

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

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

以下腳本將計(jì)算機(jī)配置為跟蹤并強(qiáng)制執(zhí)行計(jì)算機(jī)上的驅(qū)動器 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

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

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

為啟用配額,此腳本將“State”屬性的值設(shè)置為 ENFORCE_QUOTAS,然后調(diào)用“Put_”方法將此更改寫入操作系統(tǒng)。

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

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

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

#p#

修改磁盤配額設(shè)置

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

例如,以下腳本修改計(jì)算機(jī)上所有 NTFS 驅(qū)動器的 DefaultLimit 和 DefaultWarningLimit 設(shè)置:

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

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

用戶

配額限制

警告限制

KMyer

100 MB

90 MB

PAckerman

200 MB

180 MB

RWilliams

400 MB

350 MB

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

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

#p#

管理單個(gè)用戶的磁盤配額項(xiàng)

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

屬性

說明

DiskSpaceUsed

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

Limit

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

QuotaVolume

存儲配額項(xiàng)的卷。

Status

磁盤配額的當(dāng)前狀態(tài)。值如下:
0。正常:用戶在其配額限制內(nèi)。
1。警告:用戶已超出警告限制,但尚未超出其配額限制。
2。超出:用戶超出了其配額限制。

User

與配額項(xiàng)關(guān)聯(lián)的用戶。

WarningLimit

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

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

imageFile 

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

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

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

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

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

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

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

那么在 Windows 2003 中實(shí)現(xiàn)起來是否會容易一些呢?以下是專用于實(shí)現(xiàn)該目的的腳本:它返回計(jì)算機(jī)上所有驅(qū)動器的所有配額項(xiàng)的相關(guān)信息,只通過幾行代碼就實(shí)現(xiàn)了該目的:

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

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

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

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

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

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

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

為什么要提到這一點(diǎn)呢?因?yàn)槟梢暂p松編寫一個(gè)腳本以返回超出警告限制或配額限制的用戶列表,然后讓該腳本向每個(gè)用戶發(fā)送電子郵件,通知他們出現(xiàn)的情況,可能還會提供有關(guān)如何釋放更多磁盤空間的建議。請嘗試?yán)貌僮飨到y(tǒng)內(nèi)置的磁盤配額管理工具來實(shí)現(xiàn)該目的。

#p#

檢索單個(gè)磁盤配額項(xiàng)

至此可以明顯地看出,Windows Server 2003 和 Windows XP 中新增的 WMI 類可簡化對磁盤配額設(shè)置與配額項(xiàng)的總體管理(即對計(jì)算機(jī)上所有驅(qū)動器的磁盤配額設(shè)置與配額項(xiàng)進(jìn)行管理)。不過,也可以對各個(gè)配額項(xiàng)進(jìn)行管理。例如,以下腳本(我們得承認(rèn),看上去有點(diǎn)兒嚇人)檢索用戶 fabrikam\kenmyer 在計(jì)算機(jī)驅(qū)動器 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

事實(shí)上,腳本的大部分內(nèi)容非常淺顯易懂,但有一個(gè)明顯的例外情況:用于檢索配額項(xiàng)的 WQL 查詢。您可能注意到了,該查詢滿是 & 號、單引號、雙引號及各種標(biāo)點(diǎn)??瓷先ゲ惶庞^(盡管古語有云,情人眼里出西施),但這正是 WMI 跟蹤各個(gè)配額項(xiàng)的方式。例如,以下是 Wbemtest 中配額項(xiàng)實(shí)例的外觀:

imageFile 

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

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

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

修改磁盤配額項(xiàng)

Limit 和 WarningLimit 屬性都是讀/寫屬性:這意味著,可以使用腳本來修改其中任何一個(gè)屬性的值。例如,以下腳本修改用戶 fabrikam\kenmyer 的驅(qū)動器 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_

同往常一樣,應(yīng)確保在分配新值后調(diào)用“Put_”方法。如果不調(diào)用 Put_,并不會生成任何錯(cuò)誤,但也不會對配額項(xiàng)進(jìn)行任何更改。

當(dāng)然,也可以更改驅(qū)動器上所有用戶的“Limit”。下面的腳本正好可以實(shí)現(xiàn)此目的:

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#

刪除磁盤配額項(xiàng)

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

當(dāng)然,只有在相關(guān)數(shù)字有效時(shí),這種計(jì)算才有用處。如果實(shí)際上有 50 個(gè)用戶,則可能為每個(gè)用戶少分配了磁盤空間;如果有 200 個(gè)用戶,則分配的磁盤空間超過實(shí)際存在的磁盤空間。因此,需要密切注意驅(qū)動器的可用磁盤空間大小和配額項(xiàng)數(shù)。要完成后一項(xiàng)任務(wù),需要經(jīng)常刪除無效的配額項(xiàng),例如,組織中不再存在的用戶或不再具有驅(qū)動器訪問權(quán)限的用戶的配額項(xiàng)。(您需要手動完成此項(xiàng)任務(wù),因?yàn)槊看蝿h除用戶帳戶時(shí)并不會自動刪除配額項(xiàng)。)所幸的是,這是另一項(xiàng)可以使用腳本來執(zhí)行的任務(wù)。

要刪除配額項(xiàng),只需連接到該項(xiàng),然后調(diào)用“Delete_”方法;甚至不必調(diào)用 Put_,即可將更改寫入操作系統(tǒng)。在調(diào)用 Delete_ 時(shí),即會刪除配額項(xiàng)。

以下腳本刪除用戶 fabrikam\kenmyer 在驅(qū)動器 C 上的配額項(xiàng):

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_

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

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

創(chuàng)建新的磁盤配額項(xiàng)

如上所述,不必為可能在驅(qū)動器中保存文件的每個(gè)新用戶創(chuàng)建新的配額項(xiàng)。這便是默認(rèn)配額及默認(rèn)警告限制存在的原因。用戶保存文件時(shí),操作系統(tǒng)會查找用戶及其配額設(shè)置。如果用戶尚無配額項(xiàng),操作系統(tǒng)會根據(jù)默認(rèn)設(shè)置自動創(chuàng)建一個(gè)新的配額項(xiàng)。這大大簡化了磁盤配額管理。

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

這里再先給您提個(gè)醒:用于創(chuàng)建新配額項(xiàng)的腳本看上去有點(diǎn)兒古怪。不過,示例腳本在設(shè)計(jì)時(shí)也考慮了使用簡便性:您只需為驅(qū)動器、用戶名和域分配相應(yīng)的值,即可照搬使用此腳本。

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_

是啊,我們知道:此腳本比我們一直使用的腳本略為復(fù)雜一些。這在很大程度上是因?yàn)?,我們需要?chuàng)建表示用戶帳戶 (objAccount) 和創(chuàng)建配額項(xiàng)時(shí)所在的驅(qū)動器 (objDisk) 的對象引用??梢允褂靡韵聝尚写a來執(zhí)行這項(xiàng)操作:

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

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

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

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

當(dāng)然,接下來使用 Put_ 方法實(shí)際創(chuàng)建配額項(xiàng)。

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

原文地址

查看更多相關(guān)文章

 

責(zé)任編輯:yangsai 來源: 微軟TechNet中文站
相關(guān)推薦

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

2010-05-28 11:02:04

2015-07-14 09:40:33

Windows Ser退役

2010-07-26 09:07:32

Windows SerWindows SerLinux

2009-03-30 15:52:24

Windows Emb

2009-12-02 13:36:28

2011-07-06 08:58:56

2010-04-20 14:06:07

NTFS權(quán)限

2020-09-27 10:05:20

Windows 代碼系統(tǒng)

2010-08-30 11:03:48

DHCP服務(wù)器Windows 200Windows Ser

2011-03-02 17:31:39

Pureftpd

2010-11-01 06:28:51

2009-09-24 11:02:24

打印服務(wù)器

2009-06-19 08:31:59

Windows 7微軟操作系統(tǒng)

2009-10-22 09:25:28

linux磁盤配額
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號