您好,CW。尽管“信任,但也要验证”这句话常会给前总统 Ronald Reagan 赢得赞誉,我们却始终认为这听起来更像是系统管理员会说的话:“您说已经在那台计算机上安装了 ADAM,我当然信任您。我只是需要验证一下是否安装了 ADAM。这完全是两回事。”
那么如何能验证计算机上是否安装了 ADAM(Active Directory 应用程序模式)呢?下面提供了一种方法,它也是通常要归功于前总统 Reagan 的一种脚本解决方案:
strComputer = "."
Set objWMIService = GetObject("winmgmts://" & strComputer & "/root/cimv2")
Set colServices = objWMIService.ExecQuery _
("Select * from Win32_Service where Name Like '%ADAM_%'")
If colServices.Count = 0 Then
Wscript.Echo "ADAM is not installed."
Else
For Each objService in colServices
Wscript.Echo objService.Name & " -- " & objService.State
Next
End If
这个脚本所依赖的条件是 ADAM 作为服务运行:如果脚本发现 ADAM 服务的实例,就会知道已经安装了 ADAM。不可否认,这里有一个问题:ADAM 的每个实例都以不同的名称作为独立的服务运行。所幸还有一种简单的方法可以确定是否安装了 ADAM 的任何实例。这也正是我们接下来所要讨论的。
该脚本先是连接到本地计算机上的 WMI 服务;照例,只需将计算机名称赋予变量 strComputer,就可将此脚本修改为可以对远程计算机进行操作。接下来我们遇到了下面这行代码:
Set colServices = objWMIService.ExecQuery _
("Select * from Win32_Service where Name Like '%ADAM_%'")
这行代码的作用是使用 Like 运算符返回服务名称中包含字符 ADAM_ 的所有服务。使用 WMI 的 LIKE 运算符时,两个百分号代表“任何内容”。这意味着我们的查询的含义是:“返回 Name 属性中含有字符 ADAM_ 的所有服务。我不关心 ADAM_ 的前面或后面是什么内容;我只关心 Name 中的某处存在字符串 ADAM_。”
这么做的原因何在?嗯,正如我们说明过的,ADAM 的每个实例都作为独立的服务运行;不过,每个服务名称都将以字符 ADAM_ 开头。例如,如果有名为 Fabrikam 的 ADAM 实例,服务名称将是 ADAM_Fabrikam;如果有名为 Contoso 的 ADAM 实例,服务名称将是 ADAM_Contoso。我们对查询进行了相应的构建,以确保这两个实例中的任何一个(或 Name 中有字符 ADAM_ 的任何其他服务)都能作为服务集合的一部分而返回。
|
注意:当然,您可能在想,“等一下,脚本专家:不是只有 Windows XP 和 Windows Server 2003 才支持 LIKE 运算符吗?如果是在 Windows 2000 上运行 ADAM,该怎么办呢?”是啊,您说的没错:只有 Windows XP 和 Windows Server 2003 才支持 LIKE 运算符。不过,在这里应该不会造成多大的问题,因为 ADAM 本身仅受 Windows XP 和 Windows Server 2003 的支持。由于无法在 Windows 2000 上运行 ADAM,也就不必担心 Windows 2000 计算机上是否安装了 ADAM,一定是没有安装。当然,您将只能在 Windows XP 或 Windows Server 2003 计算机上运行此脚本。但如果您要使用 ADAM 的话,我们认为您将能够找到一台没有太多问题的计算机。 |
检索服务集合后,我们会遇到以下 If Then Else 代码块:
If colServices.Count = 0 Then
Wscript.Echo "ADAM is not installed."
Else
For Each objService in colServices
Wscript.Echo objService.Name & " -- " & objService.State
Next
End If
它的作用是检查所返回集合的 Count 属性是否等于 0。Count 会让我们了解集合中项的数目:如果 Count 等于 0,则表明集合中没有项。进而意味着计算机中没有安装 ADAM 的实例,我们将回显那条消息。
如果 Count 大于 0,则表明至少找到了一个 ADAM 实例。在这种情况下,我们建立一个简单的 For Each 循环以遍历所有 ADAM 实例,并且对于每一个实例,都将报告其 Name 和 State(即运行、停止、暂停等)。
这就是您需要做的一切,运行此脚本就行了。您说什么?您不信任我们是什么意思?噢,我们明白了:您确实信任我们,您只是想验证脚本是否的确有效。我们能够理解:这完全是两回事。请试一试,看看会发生什么。