| 网站首页 | 新闻中心 | 系统安全 | 网络安全 | 安全技术 | 下载中心 | 
课件制作网.
收藏本站
设为首页
安全365
如何确定计算机上下一个可用的驱动器号?
如何确定计算机上下一个可用的驱动器号?
作者:佚名 文章来源:不详 点击数: 更新时间:2007-1-23 20:10:27
问:

嗨,Scripting Guy!如何确定计算机上下一个可用的驱动器号?

-- TW

答:

您好,TW。有趣的问题,它时不时地就出现。过去用户只有驱动器 A、B 和 C 时,这很容易解决,您往往可以猜到不同于这三个驱动器号的任何驱动器号都是可用的。但现在,情况不同了:不但网络的增长意味着用户很可能有一个驱动器或两个映射的驱动器,而且 CD-ROM 和 DVD 驱动器、USB 驱动器、便携式硬盘和其他类似设备的广泛应用几乎使得计算机所拥有的驱动器必然超出驱动器 A、B 和 C 。那么在这个高科技字母池中,该如何确定哪个驱动器号可用以及哪个不可用?

实际上,这比您可能想象的更简单。首先,我们只需要考虑 23 个字母,我们可以忘掉驱动器 A、B 和 C。(当然,驱动器 A 和 B 是为软盘保留的并且计算机中的第一硬盘驱动器将总是驱动器 C。)要查找下一个可用的驱动器号,我们可以从驱动器 D 开始,然后是驱动器 E,驱动器 F,一直继续下去,直到找到了可用的驱动器号或直到搜索到驱动器 Z。

当然,要这样做,我们还需要了解计算机上哪些驱动器号正在使用。幸运地是,这非常简单:我们可以使用 Win32_LogicalDisk 类,检查 DeviceID 属性,以返回正在使用中的驱动器号的集合。这样:

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



Set colDisks = objWMIService.ExecQuery("Select * from Win32_LogicalDisk")



For Each objDisk in colDisks Wscript.Echo objDisk.DeviceID Next 

在我们的测试计算机上,我们得到以下驱动器号:

C: D: E: G: Z: 

显然,我们可以查看此数据,然后轻松确定下一个可用的驱动器号。但为什么我们必须做所有这些工作?不是有人说过通过运行脚本来确定下一个可用驱动器号的事情吗?

的确我们做到了。这就是可以确定计算机上下一个可用的驱动器号的脚本。我们来看看这个脚本,然后我们将解释它如何工作:

Set objDictionary = CreateObject("Scripting.Dictionary")



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



Set colDisks = objWMIService.ExecQuery("Select * from Win32_LogicalDisk")



For Each objDisk in colDisks objDictionary.Add objDisk.DeviceID, objDisk.DeviceID Next



For i = 67 to 90 strDrive = Chr(i) & ":" If objDictionary.Exists(strDrive) Then Else Wscript.Echo strDrive & " is the next available drive letter."Wscript.Quit End If Next Wscript.Echo "There are no available drive letters on this computer.”

开始时我们创建了一个 Dictionary 对象的实例,该脚本对象便于我们在内存中存储数据,同样重要的是便于我们确定哪些数据存储在内存中,哪些不存储在内存中。(关于 Dictionary 对象更详细的讨论,请参阅 Microsoft Windows 2000 Scripting Guide(Microsoft Windows 2000 脚本指南)的“脚本运行时入门”。)然后我们使用 Win32_LogicalDisk 类检索计算机上当前使用的所有驱动器号 (DeviceID) 的列表。但是,此时我们不会将信息回显到屏幕上,而是将其存储到 Dictionary 对象中。这就是下面这行代码所做的工作:

objDictionary.Add objDisk.DeviceID, objDisk.DeviceID 

词典中的元素由两部分组成:关键字和条目。对这个特定脚本,我们实际上只需要关键字(它为我们提供快速确定词典中是否有信息存在的方法),但 Dictionary 对象两部分都需要。因此,我们简单地将关键字和条目都设置为驱动器号,因而将相同的“objDisk.DeviceID”参数传递给 Add 方法。

当脚本完成对驱动器号集合的循环后,我们就会有一个词典,由以下关键字(和条目)组成:

C: D: E: G: Z: 

现在我们有了当前计算机上使用的所有驱动器号的列表,剩下所要做的就是查找下一个可用驱动器号。这就是下面代码块所做的工作:

For i = 67 to 90 strDrive = Chr(i) & ":" If objDictionary.Exists(strDrive) Then Else Wscript.Echo strDrive & " is the next available drive letter."Wscript.Quit End If Next Wscript.Echo "There are no available drive letters on this computer.”

不用担心,我们会解释该代码。如我们以前提到过的,我们需要检查字母 D 到 Z,以确定其中的字母是否可用于映射驱动器。实现该目的的真正简单的办法是创建一个 For Next 循环,对这些字母的 ASCII 值循环一遍。如其所示,大写字母 D 的 ASCII 值是 67,大写字母 Z 的 ASCII 值是 90。因此 For Next 循环从 67 运行到 90:

For i = 67 to 90 

ASCII 值对 For Next 循环很适用,但不太适用于驱动器映射(很少计算机有,例如,驱动器 81:)。因此,在下一行代码中,我们使用 Chr 函数将 ASCII 值转换回其等价字符。例如,当循环第一次运行时,i (循环变量)等于 67。Chr 函数取该值 (67),然后将其转换为大写字母 D。我们在末尾加一个冒号,变量 strDrive 将取值“D:”,看起来很像驱动器号。

剩下的就是小孩的游戏。(啊,假定您的孩子知道一些 VBScript。)我们使用 Dictionary 对象的 Exists 方法查看词典中是否存在第一个驱动器号 D:。记住,词典包括不可用的所有驱动器号的列表。如果在词典中找到 D:,那么意味着已有驱动器使用该字母。在这种情况下,我们继续循环,试试下一个驱动器号 (E:)。

如果我们找到一个不在词典中的驱动器号,会发生什么情况呢? 噢,这意味着该驱动器号对我们可用。因此,我们做两件事。首先,我们回显指示该驱动器号可用的消息。然后,我们使用 Quit 方法退出该脚本。为什么此时退出脚本呢? 啊,我们已经找到了下一个可用的驱动器号,那就是我们所需要的全部,无须再继续检查字母了。因此我们退出,继续做我们的事。

如果没有驱动器号可用怎么办? 如果发生了这种情况,我们将退出 For Next 循环并运行脚本的最后一行,它只表明无驱动器号可用。由于一找到可用的驱动器号我们就会退出脚本,所以仅当我们搜索驱动器号失败时才执行该行代码。

【转自世纪安全网 http://www.21safe.com】
文章录入:admin    责任编辑:admin 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
     
     
     
    用户注册邮箱被盗 MSN已
    用户注册邮箱被盗 MSN已
    CSO们如何应对新技术的安
    普通企业如何应对黑客攻
    企业该如何防范由VoIP引
    浅谈IT如何实现企业的应
    黑客与正规企业是如何串
    如何无限制申请Gmail 2.
    企业如何避免人为因素的
    社会工程学:如何利用黑客

    Copyright © 2006-2008 www.anquan365.com 安全365
    建议使用1024*768分辨率及第三方浏览器对本站进行浏览