特殊指令之SC命令详解
DOS脚本梳理已发布文章 :
SC命令是XP系统中功能强大的DOS命令,SC命令能与“服务控制器”和已安装设备进行通讯。
声明一下: 小编是从微软官网上查的资料(https://technet.microsoft.com/zh-cn/library/cc772676#BKMK_config), 只是通过自己的理解进行测试并插入小编的测试截图, 希望对大家有用
Win7及其以上版本当然也能用
SC命令主要的几个功能:
1. 更改服务的启动状态(这是比较有用的一个功能) ,可以设置存储在注册表中的服务属性,以控制如何在启动时启动服务应用程序,以及如何将其作为后台程序运行。即更改服务的启动状态
2. 删除服务(除非对自己电脑的软、硬件所需的服务比较清楚,否则不建议删除任何系统服务,特别是基础服务)
3. 停止或启动服务(功能上类似于net stop/start,但速度更快且能停止的服务更多)
4. SC可以 检索和设置有关服务的控制信息。可以使用 SC.exe 来测试和调试服务程序
5. 可以创建批处理文件来调用不同的 SC 命令,以自动启动或关闭服务序列。
说白了: SC.exe提供的功能类似于“控制面板”中“管理工具”项中的“服务”
获取SC的帮助文档 :
在 cmd 窗口中执行 SC 命令即可获取其帮助文档内容, 从帮助文档中可以看到, SC下面还有很多个子命令, 所以, 除 SC Query 外, 其它命令的帮助文档的获取方式, 就是在CMD中执行 SC + 子命令名 就可以获取到.
值得注意的一点: 因为SC命令操作的是系统服务, 所以最好在管理员权限下操作.
SC命令帮助
语法体: sc <ServerName> [command] [service name] <option1> <option2>...
命令行语法键
下表描述了用于指示命令行语法的标记。
表示法 | 说明 |
---|---|
不带方括号或大括号的文本 |
您必须键入如下所示的项目 |
< 尖括号内的文本 > |
您必须为其提供值的占位符 |
[方括号内的文本] |
可选的项目 |
{大括号内的文本} |
一组所需的项目。选择一个 |
竖线 (|) |
互斥项 ; 的分隔符选择一个 |
省略号 (…) |
可重复的项目 |
ServerName: 指定服务所在的远程服务器的名称。该名称必须使用 UNC 格式(“\myserver”),无此参数则默认为本地.
[command]: SC的子命令
[service name]: 服务名称(不一定是显示的名称)
SC命令不能单独使用,必须和其它的命令结合起来一起使用。
注意注意再注意: 每个参数项=号后面必须有一个空格, 再接参数值. 如: sc query type= driver type= interact
声明: 小编是一个个的去写的实例, 不敢误导众友人, 大多理论文本来自微软官方, 我是边理解边实验, 不懂的地方也有标注. 由于涉及对微软系统更加深入了点, 命令及参数以小编的水平是稍复杂.
至于条友们是否能看的下去, 嘿嘿 ,感觉肯定收藏的占9成.
(1) sc lock -----锁定“服务控制管理器”的数据库。
语法
sc [ServerName] lock
参数
-
ServerName
-
指定服务所在的远程服务器的名称。该名称必须使用 UNC 格式(“\myserver”)。要在本地运行 SC.exe,请忽略此参数。
-
/?
-
在命令提示符下显示帮助。
备注
-
锁定“服务控制管理器”的数据库会阻止启动任何服务。如果要确保服务在停止之后不会启动,请使用这个命令。这可以使您不受干扰地进行一些操作(例如,删除服务)。
-
使用 lock 操作锁定“服务控制管理器”的数据库,然后通过键入 u 来使数据库解锁。也可停止锁定数据库的进程。
sc lock操作演示
(2) sc querylock -----查询和显示“服务控制管理器”数据库的锁定信息。
sc querylock 信息中几个参数的意思
解锁后的状态信息
(3) sc query-----------查询服务的状态(当前本机所有的服务状态信息),或枚举服务类型的状态。
获得和显示关于指定的服务、驱动程序、服务类型或驱动程序类型的信息
语法(此类内容看不懂就往下滑, 可以看实例演示)
Sc [ServerName] query [ServiceName] [type= {driver | service | all}] [type= {own | share | interact | kernel | filesys | rec | adapt}] [state={active | inactive | all}] [bufsize= BufferSize] [ri= ResumeIndex] [group= GroupName]
下表描述了用于指示命令行语法的标记。
表示法 | 说明 |
---|---|
不带方括号或大括号的文本 |
您必须键入如下所示的项目 |
< 尖括号内的文本 > |
您必须为其提供值的占位符 |
[方括号内的文本] |
可选的项目 |
{大括号内的文本} |
一组所需的项目。选择一个 |
竖线 (|) |
互斥项 ; 的分隔符选择一个 |
省略号 (…) |
可重复的项目 |
参数
-
ServerName
-
指定服务所在的远程服务器的名称。该名称必须使用 UNC 格式(“\myserver”)。如果要在本地运行 SC.exe,请忽略此参数。
-
ServiceName
-
指定由 getkeyname 操作返回的服务名。此 query 参数不与其他的 query 参数结合使用(除了 ServerName)。
-
type= {driver | service | all}
-
指定需要枚举的内容。默认类型为 service。
值 描述 driver
指定仅枚举驱动程序。
service
指定仅枚举服务。
all
指定同时枚举驱动程序和服务。
-
type= {own | share | interact | kernel | filesys | rec | adapt}
-
指定要枚举的服务类型或驱动程序类型。
值 描述 own
服务以其自身的进程运行。不与其他服务共享可执行文件。这是默认值。
share
服务作为共享进程运行。与其他服务共享可执行文件。
interact
服务可以与桌面交互,接收用户的输入。交互服务必须在 LocalSystem 帐户下运行。
kernel
驱动程序。
filesys
文件系统驱动程序。
-
state= {active | inactive | all}
-
指定要枚举的服务的已开始状态。默认状态是 active。
值 描述 active
指定所有的活动服务。
inactive
指定所有暂停或停止的服务。
all
指定所有服务。
-
bufsize= BufferSize
-
以字节为单位指定枚举缓冲区的大小。默认大小为 1024 字节。当从查询返回的显示结果超过 1024 个字节时,增加枚举缓冲区的大小。
-
ri= ResumeIndex
-
指定开始或继续枚举的索引号。默认值为 0。 在查询返回的信息超过默认缓冲区能够显示的大小时,请与 bufsize= 参数结合使用这个参数。
-
group= GroupName
-
指定要枚举的服务组。默认设置为所有组。
-
/?
-
在命令提示符下显示帮助。
备注
-
如果参数及其值之间没有空格,(例如,是 type= own,而不是 type=own),则操作会失败。
-
query 操作可以显示有关服务的下列信息:SERVICE_NAME(服务的注册表子项名)、TYPE、STATE(以及不可用的状态)、WIN32_EXIT_B、SERVICE_EXIT_B、CHECKPOINT 和 WAIT_HINT。
-
在某些情况下,type= 参数可以使用两次。type= 参数的第一次出现指定是否查询服务、驱动器或所有这些项。type= 参数的第二次出现指定一个由 create 操作进一步缩小查询范围的类型。
-
当 query 命令的显示结果超过了枚举缓冲区的大小时,显示类似于以下内容的消息:
Enum: more data, need 1822 bytes start resume at index 79
要显示剩余的 query 信息,请重新运行 query,将 bufsize= 设置为所需的字节数,并将 ri= 设置为指定的索引。例如,在命令行键入下面的指令会显示剩余的输出:
sc query bufsize= 1822 ri= 79
SC Query 获取本机或远程主机的所有服务的状态信息
SERVICE_NAME: 服务名称(可用于服务操作)
DISPLAY_NAME: 服务对外显示名称(可自定义, 但不能用于操作服务)
TYPE= {DRIVER (驱动)| SERVICE(服务, 默认) | ALL(所有)} 指定需要枚举的内容。默认类型为 service。
TYPE= {own | share | interact | kernel | filesys | rec | adapt} 指定要枚举的服务类型或驱动程序类型。如上图中的(interactive) 表示此服务可交互, 属交互类型
STATE= {ACTIVE| INACTIVE| ALL}指定要枚举的服务的已开始状态。默认状态是 active。
WIN32_EXIT_CODE: 主线程退