当前位置: 首页 > 图文教程 > 脚本技术 > VBScript > 用vbs实现禁用服务

VBScript
用vbs脚本来关闭 HTML 页面的代码
用vbs实现确定是否安装了某个特定的补丁
用vbs确定用户的登录名的代码
用vbs找到映射到共享的所有驱动器并重新映射它们
可以从一台远程服务器运行 SP2 安装程序Install.vbs
用vbs判断一个日期是否在指定的时段内
vbs+hta中实现在单个 onClick 参数中包括多个子例程的代码
vbs中实现启动两个应用程序,一直等到其中一个程序结束,然后关闭另一个?
用vbs实现对文本文件中的项计数
用vbs对文本文件的内容进行排序
用vbscript把 Word 文档保存为文本文件的代码
用vbs返回 Internet Explorer 的下载控件和 Applet 的列表
用vbscript合并多个文本文件的代码
用vbscript防止本地用户更改其密码
用vbs针对一个 IP 地址范围运行脚本
用vbs 实现从剪贴板中抓取一个 URL 然后在浏览器中打开该 Web 站点
使用vbscript脚本在表单中进行选择的代码
一个把任何文件转成批处理的vbs脚本Any2Bat.vbs
windows脚本调试howto的方法
注册表的禁用与解锁方法集合

VBScript 中的 用vbs实现禁用服务


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-11   浏览: 130 ::
收藏到网摘: n/a

问:
您好,脚本专家!如何禁用服务?
-- DS
答:
您好,DS。您知道吗,脚本专家似乎无意中发现了一个好主意。在上期专栏中,我们向大家介绍了如何禁用 LMHosts 文件。今天,我们将向大家介绍如何禁用服务。如果我们这样继续下去的话,不久,我们便可将如何禁用计算机上的一切介绍给大家。请想象一下:不再有网络问题,不再有客户服务中心呼叫,不再有用户覆盖了不应覆盖的文件。我们所要做的就是禁用一切,从而所有这些问题都将消失!这可以是我们通往幸福时光的入场券。
不可否认,禁用计算机上的一切可能导致贵组织出现其他问题。但这只是需要由你们来处理的内部事务。
此外,我们可能忙于数钱而无法帮助您。
当然,在钞票开始滚滚而来之前,我们仍不得不编写此专栏,我们仍不得不付帐。正因为明确这一点,我们在下面提供了在计算机上禁用 Alerter 服务的脚本:
复制代码 代码如下:

strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colServiceList = objWMIService.ExecQuery _
("Select * from Win32_Service where Name = 'Alerter'")
For Each objService in colServiceList
If objService.State = "Running" Then
objService.StopService()
Wscript.Sleep 5000
End If
errReturnCode = objService.ChangeStartMode("Disabled")
Next
如您所见,禁用服务并不需要很多代码,并且所需的一小段代码都是很基础的代码。不过,有一个棘手的部分,这就是我们为什么将花几分钟时间逐步向您介绍此脚本的原因。
除此以外,不管怎样 Rolls Royce 经销权都不会多开放一小时。
脚本开始并没什么奇特之处:我们只是连接到本地计算机上的 WMI 服务(尽管我们也可以禁用远程计算机上的服务)。然后,我们发出以下查询,该查询返回一个仅包含一项的集合:Alerter 服务:
Set colServiceList = objWMIService.ExecQuery _
("Select * from Win32_Service where Name = 'Alerter'")
顺便说一下,请确保包括了如上所示的 Where 子句。为什么?设想一下,假设您省略了 Where 子句。在这种情况下,您的集合将包含安装在计算机上的所有服务,那么,你的脚本将尽职尽责地试图禁用每个服务。
您说对了:这通常不是什么好事。此外,脚本专家可能会控告您;毕竟,禁用计算机上的一切是我们的主意!
得到集合后,我们建立一个 For Each 循环以遍历该集合内的所有项。(是的,我们知道:集合中只有一项。但我们仍需使用 For Each 循环。)以下是棘手部分。您可以禁用运行中的服务;但是,该服务在停止运行前实际并未被禁用。如果禁用运行中的服务,该服务会一如既往地继续运行;更改将在服务停止后才生效。
正因为如此,我们使用下面这行代码来查看 Alerter 服务是否正在运行:
If objService.State = "Running" Then
如果该服务正在运行,那么我们就调用 StopService() 方法来停止该服务。之后我们暂停 5 秒(5,000 毫秒);使得服务有时间在我们继续操作以禁用它之前真正停止。我们就是照下面这样做的:
objService.StopService()
Wscript.Sleep 5000
注意:为了使该示例脚本尽可能简短,我们做了些手脚。我们假设您的服务仅处于“运行”或“停止”状态。实际上,服务还可能包含其他状态,最显著地是“暂停”或“继续”。要编写一个更稳妥的脚本,您或许还应该检查这些状态(并采取相应的措施)。但是,因为在 99.9% 情况下,服务都处于运行或停止状态,所以您通常可以使用我们给出的脚本蒙混过去。
服务停止后,我们就可以使用下面这行代码禁用它:
errReturnCode = objService.ChangeStartMode("Disabled")
如您所见,我们只是使用 ChangeStartMode 方法更改 StartMode 属性的值。我们要禁用该服务,所以我们将参数“Disabled”传递给 ChangeStartMode。我们还可以将 StartMode 设置为“Manual”或“Automatic”;这样会将 StartMode 设置为“手动”或“自动”。
请记住,服务被停止并禁用后,将无法再启动;重新启动该服务的唯一方法是重新启用它(通过将 StartMode 更改为“手动”或“自动”)。但是,我们会等到说服每个人禁用其计算机上的一切后,才介绍如何重新启用这些东西。毕竟,我们也许能够对这些脚本收取双倍的费用。