如何获得某个用户的磁盘配额信息?问:嗨,Scripting Guy!如何获得某个用户的磁盘配额信息? -- AB 答:嗨,AB。有几种不同的方法可以获得单个用户的磁盘配额信息。具体选用何种方法取决于所安装的 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 类别)的指针。幸好,虽然不是非常好用,但也不难用。如果您想获得名为“carolphilips”的用户(其帐户在 contoso 域中)的配额信息,又该如何呢?很简单;只要将“kenmyer”替换为“carolphilips”,并将“fabrikam”替换为“contoso”就行了: Set colQuotas = objWMIService.ExecQuery _ ("Select * From Win32_DiskQuota Where " & _ "User=‘Win32_Account.Domain=""contoso"",Name=""carolphilips""‘") 至少,脚本的其他部分非常简单;我们只回显各个属性的值。我们添加的唯一“有趣”的东西是一个 Select Case 语句,用于将 Status 属性返回的数值转化为可读的字符串。例如,如果返回的 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 上非常好用,但是在 Windows 2000 上却行不通;这是因为 Windows 2000 不支持 Win32_DiskQuota 类别。(Windows NT 4.0 或 Windows 98 也不支持该类别,至少部分原因在于这些 Windows 版本不支持磁盘配额,就是这么回事。)那么如果您需要某台运行 Windows 2000 的计算机的磁盘配额信息,该怎么办呢? 这时,您可以使用这个脚本,其利用 Shell 对象获得用户 kenmyer在本地计算机的驱动器 C: 上的磁盘配额信息: 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 正如您所看到的,这个脚本真的是更简短更精炼,包含的双引号相对较少。我们为何不推荐您在 XP 或 Windows 2003 上使用该脚本呢?您可以随意使用。但是,使用 Shell 对象获取磁盘配额信息存在两个限制。其一,Shell 对象脚本只能在本地计算机上运行;不同于 WMI 脚本,您将无法连接到远程计算机并返回磁盘配额信息。 其二,每次只能得到一个磁盘的配额信息。通过 WMI,可以返回包含计算机上所有驱动器的磁盘配额信息的集合。使用 Shell 对象,必须编写代码以获得驱动器 C: 的数据,然后重新编写代码以获得 驱动器 D: 的数据,再重新编写代码以获得 驱动器 E: 的数据,依此类推。 |
|