
欢迎来到本 TechNet 专栏,在这里,Microsoft 脚本专家将为您解答与系统管理脚本编写有关的各种常见问题。如果遇到系统管理脚本编写方面的问题,请将电子邮件发送到 scripter@microsoft.com。我们不能保证回答收到的所有问题,但是我们将尽最大的努力。
同时,不要忘了查看您好,脚本专家!存档。
今日问题:如果给定了驱动器盘符,如何确定驱动器标签?
您好,脚本专家!如果给定了驱动器盘符,如何确定驱动器标签?
-- PM
您好,PM。您知道,整天无所事事,只是每隔 15 分钟左右就看看表,确认一下日期和时间,在经历了这样的一个冬季后,编写此专栏的脚本专家高兴地宣布棒球赛季正式开始了。他又能去享受伟大的美国式休闲娱乐。他又能帮助美国年轻人认识到团队协作和体育道德的价值。最为重要的是,他又能每天提前一两个小时离开办公室,去指导他的球队或去观看他儿子参加的当地中学生球队的比赛。
您一定感到奇怪为什么他对棒球如此着迷。
换言之,我们的脚本专栏作家今天心情很好。当然,这可能不会持续多久:毕竟,今年 Kirkland Fire 队不太可能像上个赛季那样战胜联盟中其他所有队。不过今天,我们感觉很好,并打算庆祝一下。我们决定不仅要回答您的问题,而且还要回答另一个您不曾问过的问题。这算不算是一项服务?
重要的事情先来。您很想知道在给定驱动器盘符的情况下,如何确定驱动器的驱动器标签。好吧,看看使用下面的脚本会怎么样:
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery _
("Select * From Win32_LogicalDisk Where DeviceID = 'D:'")
For Each objItem in colItems
Wscript.Echo objItem.VolumeName
Next
嗯,没错,它是一个非常简单的小脚本。(嘿,这是棒球赛季:我们没有时间编写脚本,而是在干别的工作!)我们首先连接本地计算机上的 WMI 服务;也可以在远程计算机上执行相同的任务,只需将该计算机的名称赋给变量 strComputer 即可。然后,我们便可使用该行代码返回含有 DeviceID 为 D 的计算机上所有驱动器的集合:
Set colItems = objWMIService.ExecQuery _
("Select * From Win32_LogicalDisk Where DeviceID = 'D:'")
因为计算机的驱动器盘符必须唯一,因此我们知道集合中至多只有一项:驱动器 D(这正是我们所需要的)。要确定驱动器标签,我们只需建立一个 For Each 循环,以使我们能遍历这个仅包含一个项目的集合;在该循环内,我们将回显 VolumeName 属性的值:
Wscript.Echo objItem.VolumeName
就是这样。如果要反过来 - 也就是通过给定驱动器标签确定 DeviceID - 好吧,您只需运行此脚本:
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery _
("Select * From Win32_LogicalDisk Where VolumeName = 'Data Drive'")
For Each objItem in colItems
Wscript.Echo objItem.DeviceID
Next
酷吧?
但是等等:先别走。那毕竟只是我们承诺另外提供给您的附赠答案(就是您未曾问过的那个问题的答案)的三分之一。已经解决了确定驱动器的驱动器标签的问题,接下来的逻辑问题便是:我能使用脚本来更改驱动器的驱动器标签吗?如果不是棒球赛季,我们的回答很可能是:“不,不能。现在请走开,不要打扰我们。”不过,看看,这是棒球赛季,我们的答案会有点不同:“您当然能这样做。我们十分乐意向您展示如何去做。”
实际上,下面就是实现过程。
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery _
("Select * From Win32_LogicalDisk Where DeviceID = 'D:'")
For Each objItem in colItems
objItem.VolumeName = "Data Drive"
objItem.Put_
Next
正如您所看到的那样,该脚本非常类似我们向您展示的第一个脚本。事实上,唯一差别就是 For Each 循环中的内容:
objItem.VolumeName = "Data Drive" objItem.Put_
这一次我们打算做些什么?嗯,这一次我们要将新驱动器标签(在本例中为 Data Drive)分配给 VolumeName 属性;之所以能这样做是因为 VolumeName 恰好是一个可读写值。之后,只需调用 Put_ 方法(注意方法名末端的下划线)便可将更改写入驱动器。驱动器 D 现在将具有崭新的标签:Data Drive。看上去不比原来好多少,是吗?
现在,如果您不介意,我们有个 … 会议 … 要开。是的。一个会议 …。
欢迎访问您好,脚本专家!- 存档