您好,CB。您知道,回答这道题几乎让脚本专家感觉不舒服。为什么?嗯,乍一看,解决这个问题听起来确实很复杂;但做起来却相当容易,容易到几乎让我们觉得就这么初级的主题写一篇专栏对我们很不公平。我们毕竟是脚本专家:我们应该只解决那些最难、最费力的问题。脚本专家会拿出简单方法吗?从来没有!
但是,正如我们所说,回答这个问题几乎让我们感觉不舒服:
strComputer = "."
Set objWMIService = GetObject("winmgmts://" & strComputer & "/root/cimv2")
Set colItems = objWMIService.ExecQuery _
("Select * From Win32_CDROMDrive Where VolumeName = 'MyApps'")
Wscript.Echo colItems.Count
这个问题非常容易回答的原因是 WMI 类 Win32_CDROMDrive 包括一个名为 VolumeName 的属性。如果 CD 正巧在 CD 驱动器中,VolumeName 属性便等于该 CD 的名称(或者至少等于该 CD 在 Windows Explorer 中显示的名称)。如果想知道名为 MyApps 的 CD 是否碰巧闲置在一台计算机中,只需要将这台计算机中 VolumeName 等于 MyApps 的 CD 数量加起来即可。如果该数目等于 0,则表示 CD 没有插入到该台计算机上的任何驱动器中。如果该数目大于 0,则表示具有此名称的 CD 插入到该台计算机中。
此脚本所要做的几乎就是加总所有 CD。我们首先绑定到本地计算机上的 WMI 服务。您理所当然能够在远程计算机上执行这个任务;实际上,这正是此脚本真正派上用场之处。(如果要知道 CD 是否插入本地计算机,打开驱动器看一下可能更容易。)更有趣的是,假定将这个 CD 遗留在一百台不同的计算机中的任意一台上。在这种情况下,可能就要将此代码粘贴到其中一个多计算机脚本模板中,然后在大约 100 台计算机的每一台上进行搜索。有关完成这个任务的详细信息,请参阅多计算机脚本模板页。
好的。连接到 WMI 服务后,接着是使用这行代码检索所有 VolumeName 等于 MyApps(还有 VolumeName 是该 CD 在 Windows Explorer 中显示的名称)的 CD 驱动器的集合:
Set colItems = objWMIService.ExecQuery _
("Select * From Win32_CDROMDrive Where VolumeName = 'MyApps'")
此时只需回显 Count,它将告诉我们计算机中 MyApps CD 的数量。
伙计,我们今天结束得有点早,不是吗?好吧,下面的脚本如何?想一想我们曾提到过的多计算机模板的情况,以下是一个修订后的脚本,此脚本在名为 Servers.txt 的文本文件中列出的所有计算机上查找 MyApps CD:
On Error Resume Next
Const ForReading = 1
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTextFile = objFSO.OpenTextFile("c:/scripts/servers.txt", ForReading)
Do Until objTextFile.AtEndOfStream
strComputer = objTextFile.Readline
' =====================================================================
' Insert your code here
' =====================================================================
Set objWMIService = GetObject("winmgmts://" & strComputer & "/root/cimv2")
Set colItems = objWMIService.ExecQuery _
("Select * From Win32_CDROMDrive Where VolumeName = 'MyApps'")
Wscript.Echo strComputer, colItems.Count
' =====================================================================
' End
' =====================================================================
Loop
objTextFile.Close
正如您所看到的,我们所要做的只是将基本代码(稍微修改一下,回显计算机名称和找到的 CD 的数量)插入模板中标记为在此处插入您的代码的部分。然后,此脚本就会在文本文件中列出的每台计算机上搜索 CD。
能有更简单的吗?可能没有。这表示我们几乎要在下次弄个更难一些的问题了。几乎是这样。