PsService·下(7.21):Find/SetConfig 与服务的启动/停止/重启/暂停/恢复

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
无法停止/启动,长时间无响应 依赖链未处理/控制超时 先停依赖它的服务;用等待脚本确保状态就位
登录账号变更后不生效 未重启服务 执行 restartstopstart
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------跨网段关机/重启/注销/休眠编排攻略(含防误关护栏)

相关推荐
波诺波2 小时前
环境管理器
linux·前端·python
草莓熊Lotso2 小时前
C++ 继承特殊场景解析:友元、静态成员与菱形继承的底层逻辑
服务器·开发语言·c++·人工智能·经验分享·笔记·1024程序员节
_OP_CHEN3 小时前
Linux系统编程:(六)深入理解 Linux 软件包管理器——从原理到 yum 实战全攻略
linux·运维·服务器·yum·软件包管理器·linux生态
路過的好心人3 小时前
Nginx 的多个场景配置
运维·网络·nginx
9ilk3 小时前
【基于one-loop-per-thread的高并发服务器】--- 前置技术
运维·服务器·c++·笔记·后端·中间件
qq_343247033 小时前
docker 下搭建 nacos
运维·docker·容器
人工智能训练3 小时前
Ubuntu系统中Docker的常用命令总结
linux·运维·人工智能·ubuntu·docker·ai
我命由我123454 小时前
IDEA - IDEA 快速回到页面首尾、页面快速滑动、快速定位到指定行
java·运维·ide·后端·java-ee·intellij-idea·intellij idea
AI小小怪8 小时前
在Linux服务器上安装CVAT (Docker 28.5.1)
运维·docker·容器·数据标注·cvat