PsService·下(7.21):Find/SetConfig 与服务的启动/停止/重启/暂停/恢复
- [PsService·下(7.21):Find/SetConfig 与服务的启动/停止/重启/暂停/恢复](#PsService·下(7.21):Find/SetConfig 与服务的启动/停止/重启/暂停/恢复)
-
- 你将收获
- 1)命令速查(最小集)
- 2)Find:如何"一眼找到它"
- [3)SetConfig / Config:批量修改的正确姿势](#3)SetConfig / Config:批量修改的正确姿势)
-
- [3.1 修改启动类型](#3.1 修改启动类型)
- [3.2 修改显示名与描述(可读性)](#3.2 修改显示名与描述(可读性))
- [3.3 修改登录账号(最小权限)](#3.3 修改登录账号(最小权限))
- [4)运行控制:Start / Stop / Restart / Pause / Continue](#4)运行控制:Start / Stop / Restart / Pause / Continue)
-
- [4.1 标准操作](#4.1 标准操作)
- [4.2 依赖有序的"安全拆停"](#4.2 依赖有序的“安全拆停”)
- 5)等待与超时:别"按了就走"
-
- [5.1 等待服务进入目标状态(模板)](#5.1 等待服务进入目标状态(模板))
- [5.2 编排示例:安全重启一个有依赖的服务](#5.2 编排示例:安全重启一个有依赖的服务)
- 6)批量与回滚:把风险关进"笼子"
-
- [6.1 批量主机执行(for /f)](#6.1 批量主机执行(for /f))
- [6.2 变更前基线 & 变更后核验](#6.2 变更前基线 & 变更后核验)
- [6.3 快捷回滚(示例)](#6.3 快捷回滚(示例))
- [7)常见报错 → 快修清单](#7)常见报错 → 快修清单)
- 8)和其他工具的"合奏"
- 9)一页模板(可收藏)
PsService·下(7.21):Find/SetConfig 与服务的启动/停止/重启/暂停/恢复
目标:把 PsService 的"找、改、控 "一口吃透------按关键字定位服务(Find)、批量修改配置(SetConfig/Config),以及启动/停止/重启/暂停/恢复的安全编排。
你将收获
- 一眼定位目标服务的 Find 思路(内置/替代方案)
- SetConfig/Config 的实战模板(启动类型、显示名、描述、登录账号)
- Start/Stop/Restart/Pause/Continue 的标准用法与依赖有序操作
- 等待/超时与可回滚编排脚本
- 常见报错→快修清单
1)命令速查(最小集)
bat
:: 基本形态
psservice \\HOST [command] [ServiceName] [options]
psservice [command] [ServiceName] :: 本机
:: 指定凭据
psservice \\HOST -u DOMAIN\user -p ***** [command] ...
本篇覆盖的高频命令
- Find(或替代):按关键字快速定位服务
- Config /(部分版本提供)SetConfig:修改服务配置
- Start / Stop / Restart / Pause / Continue:运行控制(7.20 的查询/依赖/权限已讲过)
说明:部分 PsService 版本中未提供单独的
setconfig子命令,使用config即可达成相同目的;本文同时给出替代写法。
2)Find:如何"一眼找到它"
PsService 并非所有版本都内置 find,推荐通用做法 :enum + 文本筛选。
bat
:: 本机:模糊查找 "sql" 相关服务
psservice enum | findstr /i "sql"
:: 远程:模糊查找 "print/spool" 关键词
psservice \\PC-001 enum | findstr /i "print spool"
:: 导出后离线筛
psservice \\PC-001 enum > PC-001_services.txt
findstr /i "vpn tap tunnel" PC-001_services.txt
小技巧:有时你不知道"服务名 "(短名),只有"显示名/描述 "。先用
enum全量列出,再findstr过滤是最快的。
3)SetConfig / Config:批量修改的正确姿势
3.1 修改启动类型
bat
:: 自动/手动/禁用
psservice config Spooler start= auto
psservice config Spooler start= demand
psservice config Spooler start= disabled
习惯要点:
start=后面要留空格 ;配置变更不会影响当前运行状态,是否生效取决于下次启动(或你主动重启)。
3.2 修改显示名与描述(可读性)
bat
psservice config MySvc display= "App A 主服务(生产)"
psservice config MySvc description= "负责队列消费与调度"
3.3 修改登录账号(最小权限)
bat
:: 切换 LocalSystem(高权限,谨慎用)
psservice config MySvc obj=LocalSystem
:: 使用本地受限服务账号
psservice config MySvc obj=.\svcuser password=********
:: 使用域服务账号
psservice config MySvc obj=CORP\svc_app password=********
建议
- 按"最小权限"为服务创建独立账号,只给必需的文件/注册表/网络权限。
- 变更登录账号后,执行 重启服务(见下文)以使之生效。
4)运行控制:Start / Stop / Restart / Pause / Continue
4.1 标准操作
bat
:: 启动/停止
psservice start Spooler
psservice stop Spooler
:: 暂停/继续(仅对支持的服务有效)
psservice pause MySvc
psservice continue MySvc
:: 重启(部分版本支持);若不支持,则手动 stop+start
psservice restart MySvc
:: 或:
psservice stop MySvc & psservice start MySvc
4.2 依赖有序的"安全拆停"
先看依赖关系(7.20):
bat
psservice depend MySvc :: 它依赖谁
psservice depend /who MySvc :: 谁依赖它
停止顺序 :先停依赖它 的上层服务,再停它本身;
启动顺序:先启它依赖的底层服务,再启它本身与上层。
5)等待与超时:别"按了就走"
5.1 等待服务进入目标状态(模板)
bat
:: wait_svc.bat 等待服务进入目标状态(RUNNING/STOPPED)
:: 用法:call wait_svc.bat \\HOST ServiceName RUNNING 30
@echo off
set host=%1
set svc=%2
set want=%3
set /a sec=%4
:retry
for /f "delims=" %%a in ('psservice %host% query %svc% ^| findstr /i "STATE"') do set line=%%a
echo %date% %time% %svc% -> %line%
echo %line% | findstr /i %want% >nul && goto :ok
set /a sec=%sec%-1
if %sec% LEQ 0 goto :timeout
timeout /t 1 >nul
goto :retry
:ok
echo OK: %svc% reached %want%
exit /b 0
:timeout
echo TIMEOUT: %svc% not %want% in given seconds
exit /b 1
5.2 编排示例:安全重启一个有依赖的服务
bat
:: 1) 停止依赖它的服务(示意)
psservice stop MyAgent
call wait_svc.bat \\PC-001 MyAgent STOPPED 30
:: 2) 停止自身
psservice stop MySvc
call wait_svc.bat \\PC-001 MySvc STOPPED 60
:: 3) 启动依赖链底层
psservice start Tcpip
call wait_svc.bat \\PC-001 Tcpip RUNNING 15
:: 4) 启动自身与上层
psservice start MySvc
call wait_svc.bat \\PC-001 MySvc RUNNING 60
psservice start MyAgent
call wait_svc.bat \\PC-001 MyAgent RUNNING 30
6)批量与回滚:把风险关进"笼子"
6.1 批量主机执行(for /f)
bat
for /f %%h in (hosts.txt) do (
echo === %%h ===
psservice \\%%h stop MySvc
call wait_svc.bat \\%%h MySvc STOPPED 60
)
6.2 变更前基线 & 变更后核验
bat
:: 变更前
psservice \\PC-001 view MySvc > before_MySvc.txt
psservice \\PC-001 depend MySvc > before_MySvc.dep
psservice \\PC-001 security MySvc > before_MySvc.dacl
:: 变更(示例:手动/新账号)
psservice \\PC-001 config MySvc start= demand
psservice \\PC-001 config MySvc obj=CORP\svc_app password=********
psservice \\PC-001 restart MySvc
:: 变更后
psservice \\PC-001 view MySvc > after_MySvc.txt
6.3 快捷回滚(示例)
bat
:: 恢复到自动启动+LocalSystem
psservice config MySvc start= auto
psservice config MySvc obj=LocalSystem
psservice restart MySvc
7)常见报错 → 快修清单
| 报错/现象 | 可能原因 | 快速修复 |
|---|---|---|
Access is denied. |
非管理员/服务 DACL 限制 | 用管理员凭据;或先 psservice security 调整权限 |
The RPC server is unavailable. |
135/RPC/动态端口被拦、主机不在线 | 放行防火墙;确认在线与 \\HOST\ADMIN$ 可达 |
The specified service does not exist as an installed service. |
用了"显示名"而非"服务名" | psservice enum 找到 ServiceName |
| 无法停止/启动,长时间无响应 | 依赖链未处理/控制超时 | 先停依赖它的服务;用等待脚本确保状态就位 |
| 登录账号变更后不生效 | 未重启服务 | 执行 restart 或 stop→start |
Pause/Continue 无效 |
目标服务不支持暂停/继续 | 只对特定服务类型有效,改用 stop/start |
8)和其他工具的"合奏"
- PsExec :用来远程投递脚本/核验权限边界(
-s/-u -p)。 - Process Monitor(Procmon) :遇到"服务启动失败/拒绝访问",抓取启动瞬间的文件/注册表
ACCESS DENIED。 - EventLog(PsLogList) :查
System日志里的 Service Control Manager 事件(7000/7001/7034/7036...)迅速定位失败原因。
9)一页模板(可收藏)
bat
:: 找服务
psservice enum | findstr /i "keyword"
:: 改配置
psservice config Svc start= auto|demand|disabled
psservice config Svc display= "Readable Name"
psservice config Svc description= "What it does"
psservice config Svc obj=.\svcuser password=******
:: 运行控制
psservice start Svc
psservice stop Svc
psservice pause Svc
psservice continue Svc
psservice restart Svc :: 若版本不支持,用 stop+start
:: 等待状态
call wait_svc.bat \\HOST Svc RUNNING 60
:: 依赖
psservice depend Svc
psservice depend /who Svc
小结
- Find 解决"先找到它"的问题;
- Config/SetConfig 保障"改得对、能回滚";
- Start/Stop/Restart/Pause/Continue 让你"停得稳、启得起";
- 搭配依赖顺序、超时等待、基线回滚与日志校验,服务治理才能真正落地可控。
下一篇(7.22):PsShutdown------跨网段关机/重启/注销/休眠编排攻略(含防误关护栏)。