谁希望成为脚本专家?

每周脚本测验题

*

脚本测验题答案:脚本侦探的偶然冒险经历

我们从七月开始推出每周脚本测验题,此后的每一周我们都会收到这样一些人的来信,信中说:“这道测验题太简单了,能不能换换样,来个难点的?”考虑到这种情况,我们决定从 2006 年开始加大测验题的难度。接着出现了什么情况呢?猜对了:在过去的这一周里,我们又会收到这样一些人的来信,信中说:“这道测验题太难了,能不能换换样,来个容易点的?”

有没有可以吸取的教训呢?肯定有。但我们就是不知道有什么教训可以吸取。

说实话,我们并不认为这道测验题有那么难,只是有一点变化;我们认为可能是形式上的变化让大家不知所措。但是没关系:要知道,不时发发蒙没有任何坏处。

不过,这当然要看您发蒙的程度。

如果您没有参加上周的测验,可以在这里试一下;您也可以继续阅读,让我们告诉您答案。不要忘了,本周我们又给出了一道新测验题。请试一试,看看您的答案会是什么。

返回页首返回页首

2006 年 1 月 6 日答案

那么,脚本侦探怎么知道警察逮捕的年轻人并非放出计算机病毒的那个人呢?(或者说,他怎么知道那个年轻人肯定不能使用那台 Windows 2000 笔记本电脑放出病毒呢?)一种可能是脚本侦探(及其密友,也就是编写那道测验题的脚本专家)是天才,具有名副其实的高智商。

嗯,对此我们与您并无不同意见:可能性大得多的解释是,脚本侦探(及其密友)只是对一对重要线索给予了密切关注。是的,完全是史酷比的行事方式。

脚本侦探根据警察局长的讲述了解到,有人将计算机连接到网络上,运行脚本从该计算机检索了一些 WMI 信息,然后放出了病毒。介绍全部案情后,局长给脚本侦探看了下面这张照片,它捕捉到了脚本返回的部分数据:

Win32_OperatingSystem


局长怀疑那个坏蛋使用了 Win32_OperatingSystem 类。监控照片也支持这一论点:照片中显示的属性名称和值与 Win32_OperatingSystem 返回的属性名称和值相当吻合。

但这正是蹊跷之处。如果您仔细查看脚本返回的信息,就会发现回显的属性中有一个是加密级别(从技术角度上讲,是 EncryptionLevel 属性)。脚本侦探就是根据这一点断定那个年轻人不可能使用那台 Windows 2000 笔记本电脑运行脚本,然后放出病毒。为什么不能?原因很简单:Windows 2000 不支持 EncryptionLevel 属性。如果在本地计算机上运行一个 WMI 脚本,而该脚本会检索有关操作系统加密级别的信息,则该脚本一定运行在 Windows XP 或 Windows Server 2003 计算机上。就这么简单。

注意:确实,这道题是有些难;还记得吗,不是想做难点儿的吗?此外,如果您希望自己长大以后成为脚本侦探的话(我们认为差不多每个人都这么想),那就必须学会应对这类难题的方法。

那么,到底是谁放出了那个病毒呢?说实话,我们也不知道,脚本侦探似乎并没有给我们回复。尽管如此,细想起来,最近见不到 Dean 了。嗯…。

返回页首返回页首

我们应该如何知道这些?

嗯,对初学者来说,可能需要多多地看电视:毫无疑问,就连只看过一次 CSI 电视节目的人都可以在大约数分钟之内解出这道谜题。

除了多看电视(适用于任何情况的标准脚本专家建议),同样重要的是认识到各版本的 WMI 并非生来平等:Windows 2000 上的 WMI 版本与 Windows XP 上的 WMI 版本并不相同。尽管这两个版本在许多方面的确没有差别,但 Windows XP 版本的 WMI 有许多 Windows 2000 版本的 WMI 所没有的增强功能。有时,这些差异很明显:Windows XP 包含的某些对象(如 SWbemDateTime)、命名空间 (root\RSOP) 和类 (Win32_PingStatus) 是 Windows 2000 所没有的。

但在其他情况下这些差异却比较细微:可能只是某个类的新方法或新属性是先前版本的 Windows 所没有的。本案中的情况就是这样。Windows 2000 上有 Win32_OperatingSystem 类,只不过 Windows XP 版本中增加了一两个 Windows 2000 版本中所没有的新属性。

注意:不用问我们就会告诉您,据我们所知,并没有更新 Windows 2000 上的 WMI 以使其完全兼容 Windows XP 版本的计划,绝对没有。操作系统本身的内部差异实在太大,无法实行这样的计划。

好了,现在我们知道不同操作系统上的 WMI 版本之间可能存在差异。但我们应如何了解某一项在从 Windows 2000 升级到 Windows XP 后是否发生了变化呢?

这一问题的答案(以及人生中大多数问题的答案)都可以在 WMI SDK 中找到。SDK 在一个方面做得相当出色,即让您了解属性和方法是在何时引入的,以及可以在什么条件下(在何处)使用它们。例如,下面是针对 Win32_OperatingSystem EncryptionLevel 属性的条目:

EncryptionLevel 
Data type: uint32
Access type: Read-only 
Windows Server?2003 and Windows?XP:??Encryption level for secure transactions—40-bit, 128-bit, or n-bit.

如您所见,只有 Windows Server 2003 和 Windows XP 上提供了该属性。下面是附加在 PAEENabled 属性相关信息之后的相似注释:

Windows?2000, Windows?NT?4.0 SP4 and later, and Windows?XP:??The PAEEnabled property is not available.

WMI SDK:脚本侦探外出时的必备品。


返回页首返回页首