| 网站首页 | 新闻中心 | 系统安全 | 网络安全 | 安全技术 | 下载中心 | 
课件制作网.
收藏本站
设为首页
安全365
如何检索有关打印机使用的打印机驱动程序的信息?
如何检索有关打印机使用的打印机驱动程序的信息?
作者:佚名 文章来源:不详 点击数: 更新时间:2007-1-24 10:56:19
问:

您好,脚本专家! 如何检索有关特定打印机使用的打印机驱动程序的信息?

-- RW

答:

您好,RW。 您有问题要问吗? 哦,对了: 打印机驱动程序。 您今天得原谅我们: 脚本专家们(或者至少其中一个脚本专家)很伤心。 那是因为由他担任助理教练的“Colt 联盟全明星”队在“西北地区比赛”中夺得了第三名。 夺得“西北”地区第三名怎么了? 嗯,其实也没什么,只不过夺得第一名的球队要去加利福尼亚参加“区域”赛,比赛的获胜者将继续参加“Colt 联盟世界”比赛, 其他人 – 包括获得第三名的球队 – 都要回家。

不管怎样,还是感谢您提问: 给些时间,我们会恢复过来的,会回到我们平时快乐的样子的。 请于一两个月之后再试一试。 或者可能是明年的什么时候。 也许要到 2008 年,我们才会准备好再回答问题。 到那时…。

嗯,不用担心: 经理刚刚通知我们:我们已经得到了明显的恢复,现在准备回答问题。 (显然他不明白“Colt 联盟”棒球是多么的重要。) 因此我们将回答您的问题。 然后我们将再次感到伤心。

因为这是一个平常要注意的与打印相关的问题: 我们可以给出一个解决方案,它在 Windows XP 和 Windows Server 2003 下很有效,但却不适用于 Windows 2000 或 Windows 的任何其他版本。 在其他平台上可通过类似下面的脚本来返回特定打印机使用的打印驱动程序的名称,不过这几乎就是我们能够得到的所有信息:

strComputer = "."



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

Set colItems = objWMIService.ExecQuery _

    ("Select * From Win32_Printer Where DeviceID='////atl-ps-1//printer1' ")



For Each objItem in colItems

    Wscript.Echo objItem.Name

    Wscript.Echo objItem.DriverName

Next

我们认为,这总比什么都得不到要好,不过,单单名称不能准确地称之为打印机驱动程序的“详细情况”。 如果需要所谓的详细信息,您需要使用类似下面的脚本,该脚本只能在 Windows XP 或 Windows Server 2003 下运行:

strComputer = "."



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

Set colItems = objWMIService.ExecQuery _

    ("Associators Of {Win32_Printer.DeviceID='//atl-ps-01/printer1'} " _

        & "WHERE AssocClass = Win32_DriverForDevice Role=Antecedent")



For Each objItem in colItems

    Wscript.Echo objItem.Name

    Wscript.Echo objItem.DriverPath

Next

在此我们要做的就是利用 Windows XP 和 Windows Server 2003 中所添加的两个新类。虽然没有看到它们在脚本中被明确提及,但我们仍将使用新的 Win32_PrinterDriver 类来检索同打印机驱动程序有关的信息;属性 NameDriverPath(二者均在 For Each 循环中回显)是 Win32_PrinterDriver 类的属性。

第二个类 – 它在脚本中明确的说明 – 是 Win32_DriverForDevice 类。 这是一个关联类,顾名思义,该类可在两个类之间建立一个关联;在本例中,Win32_DriverForDevice 在 Win32_Printer 类中的打印机和 Win32_PrinterDriver 类中的打印机驱动程序之间建立了一个关联。 要建立此关联,我们需要使用类似下面的 Associators Of 查询:

Set colItems = objWMIService.ExecQuery _

    ("Associators Of {Win32_Printer.DeviceID='//atl-ps-01/printer1'} " _

        & "WHERE AssocClass = Win32_DriverForDevice Role=Antecedent")

用通俗易懂的话(并非脚本专家的专长!)解释此查询就是,“对 DeviceID 为 //atl-ps-01/printer1 的所有打印机使用 Win32_DriverForDevice 类来检索与该打印机关联的所有打印机驱动程序。”

此查询将照常返回一个集合,在本例中,返回的是与打印机 //atl-ps-01/printer1 关联的所有打印机驱动程序的集合。 在 For Each 循环中,我们遍历此集合并回显“Name”和“DriverPath”属性。 问题解决了。

您自己能够弄清楚的可能就这么多了;这个查询有点怪,但却相当直观。 有一件事情可能例外: Role=Antecedent 是什么意思? 在神奇的 WMI 世界里,antecedent 对象是关系独立的对象;换句话说,您可以具有各种打印驱动程序,这些打印驱动程序均不依赖于特定打印机。 然而,一台打印机只能具有一个打印驱动程序,这就意味着,打印机在关系方面扮演着从属角色。 (是的,这听起来确实像 Desperate Housewives(绝望的主妇)中的一段情节,不是吗?) 这就是说,我们可通过一些调整来彻底改变此脚本,使其查询 Win32_PrinterDriver 类以返回使用指定驱动程序的所有打印机的名称:

strComputer = "."



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

Set colItems = objWMIService.ExecQuery _

    ("Associators Of {Win32_PrinterDriver.Name='Xerox Document Centre 255 PS,3,Windows NT x86'} " _

        & "WHERE AssocClass = Win32_DriverForDevice Role=Dependent")



For Each objItem in colItems

    Wscript.Echo objItem.DeviceID

Next

请试一试,看看会发生什么。

现在,如果您不介意,我们要…做…其他事情…。

(如果仍有疑问,那是因为没有书名为 The Third-Best and the Third-Brightest 的书: 季军可不像它听起来那样有趣!)

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

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

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