DOS脚本梳理已发布文章 :
DOS基础命令(一)
DOS基础命令(二,三,四,五)
DOS命令进阶之(Net, Netstat)
DOS命令进阶之(FTP解读)
DOS命令进阶之批处理(上)
DOS命令进阶之批处理(中)
DOS命令进阶之批处理(下)
SC命令是XP系统中功能强悍的DOS命令,SC命令能与“服务控制器”和已安装设备进行通信。
声明一下: 小编是从谷歌官网上查的资料(#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 [command] [service name] ...
命令行句型键
下表描述了用于指示命令行句型的标记。
表示法说明
不带方括弧或大括号的文本
您必须键入如下所示的项目
< 尖括弧内的文本 >
您必须为其提供值的占位符
[方括号内的文本]
可选的项目
{大括弧内的文本}
一组所需的项目。选择一个
竖线 (|)
互斥项 ; 的分隔符选择一个
省略号 (…)
可重复的项目
ServerName: 指定服务所在的远程服务器的名称。该名称必须使用 UNC 格式(“\\myserver”),无此参数则默认为本地.
[command]: SC的子命令
[service name]: 服务名称(不一定是显示的名称)
SC命令不能单独使用,必须和其它的命令结合上去一起使用。
注意注意再注意: 每个参数项=号旁边必须有一个空格, 再接参数值. 如: sc query type= driver type= interact
声明: 小编是一个个的去写的实例, 不敢欺骗众友人, 大多理论文本来自谷歌官方, 我是边理解边实验, 不懂的地方也有标明. 由于涉及对微软系统愈发深入了点, 命令及参数以小编的水平是稍复杂.
至于条友们是否能看的下去, 嘿嘿 ,感觉肯定收藏的占9成.
(1) sc lock -----锁定“服务控制管理器”的数据库。
语法
sc [ServerName] lock
参数
备注
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]
下表描述了用于指示命令行句型的标记。
表示法说明
不带方括弧或大括号的文本
您必须键入如下所示的项目
< 尖括弧内的文本 >
您必须为其提供值的占位符
[方括号内的文本]
可选的项目
{大括弧内的文本}
一组所需的项目。选择一个
竖线 (|)
互斥项 ; 的分隔符选择一个
省略号 (…)
可重复的项目
参数
备注
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: 主线程退出码
SERVICE_EXIT_CODE: 服务退出码
注意,这里存在一个给这个服务的退出码,即使这个服务部不在运行,键入net helpmsg 1077,将会得到对1077错误信息的说明:
CHECKPOINT: 检查点, 可以提供一个关于在程序停止时还要顺着初始化继续前进多久的确切报告。
WAIT_HINT: 等待指示
如上图中的: (STOPPABLE, PAUSABLE, IGNORES_SHUTDOWN) 这个信息显示此服务可以接受的控制命令,上面这个就是//可停止//可暂停//忽略死机
示例
下面的示例显示了怎样使用 sc query 命令:
sc query 列举活动服务和驱动程序状态(列出所有的服务,同下边的sc query all, 建议实操一下)
sc query 360EntClientSvc 显示360EntClientSvc服务的状态信息
sc query type= driver 只列出活动的驱动程序(仔细看, 每个参数值前都有一个空格的哦)
sc query type= service 列举Win32服务
sc query state= all 列举所有的服务和驱动程序(列出所有的服务)
sc query bufsize= 50 用50 byte的缓冲区来进行罗列
sc query bufsize= 98 ri= 469
sc query ri= 14 在恢复列出时使用index=14(没看懂, 只能在复印列表的起始位置上对比一下)
sc query ri= 14, more就是多页显示, 请动手对比这个命令有无的区别
sc query ri= 56
sc query type= service type= interact 列举所有的交互式WIN32服务
sc query type= service type= interact
因为这儿勾选了 "允许服务与桌面交互" 所以在 TYPE 中有显示(interactive)
这个语音服务由于 "允许服务与桌面交互" 未勾选, 所以CMD中没有(interacitve)
sc query type= driver group= ndis 列出所有属于于ndis服务组的所有驱动程序
sc query type=driver group=ndis
ndis服务组列表
(4) sc queryex---------查询服务的扩充状态,或枚举服务类型的状态。
获得和显示关于指定的服务、驱动程序、服务类型或驱动程序类型的 扩展信息(注意这儿是扩充信息)。
语法
Sc [ServerName] queryex [type= {driver | service | all}] [type= {own | share | interact | kernel | filesys | rec | adapt}] [state= {active | inactive | all}] [bufsize= BufferSize] [ri= ResumeIndex][group= GroupName]
下表描述了用于指示命令行句型的标记。
表示法说明
不带方括弧或大括号的文本
您必须键入如下所示的项目
< 尖括弧内的文本 >
您必须为其提供值的占位符
[方括号内的文本]
可选的项目
{大括弧内的文本}
一组所需的项目。选择一个
竖线 (|)
互斥项 ; 的分隔符选择一个
省略号 (…)
可重复的项目
参数
备注
Enum: more data, need 2130 bytes start resume at index 75
示例
下面的示例显示了怎样使用 sc queryex 命令:
sc queryex 360EntClientSvc
就是可以多看到两个属性
sc queryex group= "ndis"
(5) sc start-----------启动服务。
(6) sc pause-----------向服务发送 PAUSE 控制恳求。
(7) sc stop------------向服务发送 STOP 请求。
(8) sc continue--------向服务发送 CONTINUE 控制恳求。
(9) sc interrogate-----向服务发送 INTERROGATE 控制恳求,会导致该服务使用“服务控制管理器”更新其状态(没能完全理解其作用, 也没有测试对比下来, 有懂的烦请赐教一下)。
(10) sc config----------更改服务的配置(永久)。
修改注册表和“服务控制管理器”数据库中服务项目的值。
语法
Sc [ServerName] config [ServiceName] [type= {own | share | kernel | filesys | rec | adapt | interacttype= {own | share}}] [start= {boot | system | auto | demand | disabled}] [error= {normal | severe | critical | ignore}] [binpath= BinaryPathName] [group= LoadOrderGroup] [tag= {yes | no}] [depend= dependencies] [obj= {AccountName | ObjectName}] [displayname= DisplayName] [password= Password]
下表描述了用于指示命令行句型的标记。
表示法说明
不带方括弧或大括号的文本
您必须键入如下所示的项目
< 尖括弧内的文本 >
您必须为其提供值的占位符
[方括号内的文本]
可选的项目
{大括弧内的文本}
一组所需的项目。选择一个
竖线 (|)
互斥项 ; 的分隔符选择一个
省略号 (…)
可重复的项目
参数
备注
sc config 的帮助文档
示例
下面的示例显示了怎样使用 sc config 命令:
sc config NewService binpath= "ntsd -d c:\windows\system32\NewServ.exe"
以上命令是更改 NewService 这个服务的服务程序的绑定路径.
修改服务的启动方法为 手动
全命令示范文本
C:\>sc config \\远程主机IP或主机名 type= share start= auto error= normal binpath= "d:\newfile\abc.exe" group= newGroup tag= yes depend= 所依赖的服务名称,多个请以/符号分隔 obj= 如果此服务必须特殊的用户名在这儿输入,否则就使用默认的LocalSystem用户及空密码 password= 特殊用户的密码
sc config 服务名 start=AUTO (自动)
sc config 服务名 start= DEMAND (手动)
sc config 服务名 start= DISABLED(禁用)
小编对上述文本作了个间隔加粗的格式, 以便能分辨开. 不懂的请对照里面的参数.
(11) sc descrīption-----更改服务的描述。
设置服务的描述字符串。
语法
Sc [ServerName] description [ServiceName] [Description]
参数
示例
下面的示例显示了怎样使用 sc description 命令:
sc description 360EntClientSvc "通过CMD中SC命令更改后的内容: 360企业客户端服务"
(12) sc failure---------更改服务失败时执行的操作。
指定服务失败时要采取的举措。
语法
Sc [ServerName] failure [ServiceName] [reset= ErrorFreePeriod] [reboot= BroadcastMessage] [command= CommandLine] [actions= FailureActionsAndDelayTime]
下表描述了用于指示命令行句型的标记。
表示法说明
不带方括弧或大括号的文本
您必须键入如下所示的项目
< 尖括弧内的文本 >
您必须为其提供值的占位符
[方括号内的文本]
可选的项目
{大括弧内的文本}
一组所需的项目。选择一个
竖线 (|)
互斥项 ; 的分隔符选择一个
省略号 (…)
可重复的项目
参数
备注
示例
下面的示例显示了怎样使用 sc failure 命令(小编在这儿只对命令实例做解释说明, 没有实验测试):
(1) 如果msftpsvc服务无故障运行30秒失败了, 则5秒后重新启动
sc failure msftpsvc reset= 30 actions= restart/5000
(2) 如果dfs服务无故障运行60秒失败, 则5秒后运行command指定的程序或脚本
sc failure dfs reset= 60 command= c:\windows\services\restart_dfs.exe actions= run/5000
(3) 如果dfs服务无故障运行60秒失败, 则30秒后重启计算机
sc failure dfs reset= 60 actions= reboot/30000
(4) 如果dfs服务无故障运行60秒失败, 则30秒后重启计算机, 并广播"因为dfs服务运行失败, 计算机将在30秒后重新启动"
sc failure dfs reset= 60 reboot= "The Distributed File System service has failed.Because of this, the computer will reboot in 30 seconds." actions= reboot/30000
(5) 如果myservice服务无故障运行1小时失败, 则5秒后重启,
第二次无故障运行1小时失败, 则10秒后运行command指定的程序或脚本,
第三次元故障运行1小时失败, 则1分钟后重启计算机机, 同时广播"myservice服务死掉了, 即将重启笔记本"
sc failure myservice reset= 3600 reboot= "MyService crashed -- rebooting machine" command= "%windir%\MyServiceRecovery.exe" actions= restart/5000/run/10000/reboot/60000
(13) sc failureflag-----更改服务失败时, 故障恢复操作的标志。
指定在服务停止或因错误失败时,将会触发故障恢复操作。
语法
scfailureflag [ ] [ ]
参数
参数说明
指定服务所在的远程服务器的名称。 名称必须使用通用命名约定 (UNC) 格式 (例如内)。 若要在本地运行 SC.exe,忽略此参数。
指定由getkeyname操作返回的服务名称。
默认值为0 (无操作)。 如果此参数设置为1,并且用户已配置的服务故障恢复操作,如果服务因为错误而停止恢复操作也会触发。
在命令提示符下显示帮助。
备注
如果服务未能正常工作,但一般可以重新正常启动,则设置此标志。
示例
要触发现有的服务故障恢复操作,请键入:
sc failureflag 服务名称 Flag= 1
(14) sc sidtype---------更改服务的服务 SID 类型。
更改服务的服务安全标识符(SID)类型设置。
用法:
sc sidtype [service name] [type]
选项:
type =
备注:
如果此设置为“unrestricted”,服务控制管理器(SCM)会由于进程中的第一个服务正在启动而在服务进程上次启动时将此服务的 SID 添加至服务进程令牌。此设置仅针对 Win32 用户模式服务有效。
如果此设置为“restricted”,服务控制管理器(SCM)会由于进程中的第一个服务正在启动而在服务进程上次启动时将此服务的 SID 添加至服务进程令牌。
此外,此服务的 SID 也会被添加至进程令牌中的受限 SID 列表,因此该进程令牌将成为一个受限的令牌。有关受限令牌的详尽信息,请参见 MSDN。此设置仅针对 Win32 用户模式服务有效。此外,对于共享进程服务,共处于进程中的所有服务的 SID 类型必须都被设因此设置,以便服务生效。
如果此设置为“none”,SCM 不会将服务的 SID 添加至服务进程令牌。
小编对系统的研究不深, 不知其所以然, 如有前辈路过, 烦请赐教一二, 感谢谢谢!
(15) sc privs-----------更改服务的所需权限。
更改服务所需的权限设置。
用法:
sc privs [service name] [privileges]
选项:
privileges = [例如: SeBackupPrivilege/SeRestorePrivilege]
没有用到过, 不知其所以然
(16) sc qc--------------查询服务的配置信息。
语法
Sc [ServerName] qc [ServiceName] [BufferSize]
参数
备注
示例
下面的示例显示了怎样使用 sc qc 命令:
sc qc \\myserver newsrvice
sc qc rpcss 248
(17) sc qdescription----查询服务的描述。
显示服务的描述字符串。
语法
Sc [ServerName] qdescription [ServiceName] [BufferSize]
参数
示例
下面的示例显示了怎样使用 sc qdescription 命令:
sc qdescription rpcss
sc qdescription rpcss 138
(18) sc qfailure--------查询失败时服务执行的操作。
(19) sc qfailureflag----查询服务的失败操作标志。
(20) sc qsidtype--------查询服务的服务 SID 类型。
(21) sc qprivs----------查询服务的所需权限。
(22) sc qtriggerinfo----查询服务的触发器参数。
(23) sc qpreferrednode----查询首选的服务 NUMA 节点。[没有测试成功,失败]
描述:
查询 Win32 服务的首选 NUMA 节点。
此设置仅对系统自身的进程服务有效。
如果此服务没有首选节点设置,则查询将失败。
用法:
sc qpreferrednode [service name]
(24) sc delete----------(从注册表)删除服务。
从注册表中删掉服务子项。如果服务正在运行或则另一个进程有一个该服务的打开句柄,那么此服务将标记为删掉。
语法
Sc [ServerName] delete [ServiceName]
参数
备注
示例
下面的示例显示了怎样使用 sc delete 命令:
sc delete newserv
(25) sc create----------创建服务(将其添加到注册表)。
在注册表和“服务控制管理器”中为服务创建子项和项目。
语法
Sc [ServerName] create [ServiceName] [type= {own | share | kernel | filesys | rec | adapt | interacttype= {own | share}}] [start= {boot | system | auto | demand | disabled}] [error= {normal | severe | critical | ignore}] [binpath= BinaryPathName] [group= LoadOrderGroup] [tag= {yes | no}] [depend= dependencies] [obj= {AccountName | ObjectName}] [displayname= DisplayName] [password= Password]
下表描述了用于指示命令行句型的标记。
表示法说明
不带方括弧或大括号的文本
您必须键入如下所示的项目
< 尖括弧内的文本 >
您必须为其提供值的占位符
[方括号内的文本]
可选的项目
{大括弧内的文本}
一组所需的项目。选择一个
竖线 (|)
互斥项 ; 的分隔符选择一个
省略号 (…)
可重复的项目
参数
备注
示例
下面的示例显示了怎样使用 sc create 命令:
sc \\myserver create NewService binpath= c:\windows\system32\NewServ.exe
sc create NewService binpath= c:\windows\system32\NewServ.exe type= share start= auto depend= "+TDI Netbios"
如果条形码是从上往读过来的, 参数上应当都不用我多注释了.
小编我试了下 sc create notepad binpath= "D:\Program Files\EditPlus\editplus.exe" 不可行, 小编程序开发经验不足, 可能后台服务程序, 代码中须要调用特殊的库, 这样生成的程序才可以作为后台, 这一篇文章花了两时间了, 还没有写完.
(26) sc control---------向服务发送控制。
向服务发送控制码。
语法
sc [ServerName] control [ServiceName] [{paramchange | netbindadd | netbindremove | netbindenable | netbinddisable | UserDefinedControlB}]
参数
(27) sc sdshow----------显示服务的安全描述符。
(28) sc sdset-----------设置服务的安全描述符。
使用“服务描述符定义语言 (SDDL)”来设置服务的安全描述符。
语法
Sc [ServerName] sdset ServiceName ServiceSecurityDescriptor
参数
(29) sc showsid---------显示相应于假设名称的 SID 字符串。
(30) sc triggerinfo-----配置服务的触发器参数。
(31) sc preferrednode---设置首选的服务 NUMA 节点(不懂)。
(32) sc GetDisplayName----获取服务的 DisplayName
(33) sc GetKeyName------获取服务的 ServiceKeyName。
(34) sc EnumDepend------枚举服务的依存关系。
列出只有运行了指定服务能够运行的服务。
语法
Sc [ServerName] enumdepend [ServiceName] [BufferSize]
参数
备注
示例
下面的示例显示了怎样使用 sc enumdepend 命令:
sc enumdepend rpcss 5690
sc enumdepend tapisrv
虽然小编耐着脾气, 一个一个的子命令都试了, 但是还有多个指令不确实其实际作用, 创建服务针对的应当是服务类的程序, 就像 360EntClientSvc 这个服务就是服务程序, 不同于 notepad.exe 记事本程序, 记事本程序不被创建为一个服务程序.
SC命令在实际应用中, 主要是拿来优化本地系统服务, 将用不到的服务使用批处理一次性的优化掉, 或禁用或自动.
不够尽善尽美的地方, 还请批评见谅, 更希望有前辈赐教一二.