用vbs实现禁用服务

所属分类: 脚本专栏 / vbs 阅读数: 862
收藏 0 赞 0 分享
问:
您好,脚本专家!如何禁用服务?
-- 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 更改为“手动”或“自动”)。但是,我们会等到说服每个人禁用其计算机上的一切后,才介绍如何重新启用这些东西。毕竟,我们也许能够对这些脚本收取双倍的费用。
更多精彩内容其他人还在看

vbscript Split函数用法详解(字符串转数组函数)

本文详细介绍了vbscript中split函数的用法,有关split函数的一些实例,vbscript中split函数的语法介绍,有需要的朋友参考下
收藏 0 赞 0 分享

VBS实现将Excel表格保存为txt文本

希望能够找到个能给excel表另存为TXT的VBS代码,虽然另存为可以选择,但还是需要直接VBS执行这一步另存为TXT格式的,应该如何写代码呢
收藏 0 赞 0 分享

vbs解决处理TXT文本数据相关问题实现代码

使用vbs处理txt数据时,会遇到一些问题,本文将提供详细的解决方法,希望可以帮助你们
收藏 0 赞 0 分享

关于vbs 生成静态页面过程中出现的问题

访问某个aspx页面,然后把服务器返回的页面以filestream 的形式保存为html格式,接下来将介绍实现代码
收藏 0 赞 0 分享

dim函数第三个参数设置截取字符的长度问题

dim函数的第三个参数,也就是截取字符的长度,我在设置这个的时候,出了些问题,提示无效的过程调用或参数,本文详细介绍如何解决
收藏 0 赞 0 分享

邪恶的eval和new Function使用介绍

这些代码可以干什么?可以肯定的是可以干很多猥琐的事
收藏 0 赞 0 分享

WScript.Shell对象SpecialFolders属性未公开文档分享

WshShell对象的SpecialFolders属性返WshSpecialFolders 对象,该对象是一个特殊文件夹集合,其中包含整套Windows特殊文件夹
收藏 0 赞 0 分享

用VBS修改(设置)系统时间和日期的代码

用 VBS 把系统的时间修改到2038年1月19日3时14分07秒之后,这样某些依赖于 Unix 时间戳的程序就会出问题。那么怎样用 VBS 修改系统的时间呢
收藏 0 赞 0 分享

VBS For Next循环的一些细节

For Next 语句是 VBS 中常用的循环语句,你可能已经用过无数次 For Next 循环,但是你是否注意过它的一些细节呢
收藏 0 赞 0 分享

VBS For Next循环的陷阱分享

在《VBS For Next循环的一些细节》中说到了 For Next 循环的控制变量仅仅在循环开始前求值一次,但是其中存在一处陷阱
收藏 0 赞 0 分享
查看更多