PsTools 学习笔记(7.2):通用功能与远程操作基础
PsTools 学习笔记(7.2):通用功能与远程操作基础
- PsTools 学习笔记(7.2):通用功能与远程操作基础
- 一、命令行约定:先把共性吃透
- 二、远程目标写法与解析规则
- 三、备用凭据与安全要点
- 四、输出与返回码:怎么“收口”最靠谱
- 五、批量执行三连:采集 → 变更 → 验证
- 1) 采集:系统信息与磁盘空间
- 2) 变更:远程重启某项服务(示例:Spooler)
- 3) 验证:探测服务状态 + 进程存在性
- 六、常见连接问题一图流(简表版)
- 七、脚本化最佳实践
- 八、即抄即用的“远程体检”一条龙(单机)
- 结语
PsTools 学习笔记(7.2):通用功能与远程操作基础
这一篇聚焦 通用命令行约定、远程目标写法、凭据与安全、输出与返回码、批量执行套路。读完即可稳妥地把 PsTools 跑起来,为后续各子工具进阶打底。
一、命令行约定:先把共性吃透
-
帮助:多数 PsTools 支持
/?显示用法(或直接不带参数运行)。 -
静默接受协议:
-accepteula首次运行不弹出协议对话框(适合脚本/CI)。 -
去掉横幅:
-nobanner让输出更“干净”,便于重定向/比对。 -
远程目标前缀:统一用
\\计算机名或\\IP指定目标。 -
多目标批量(以 PsExec 为例):
- 逗号分隔:
\\PC01,PC02,PC03 - @清单文件:
\\@C:\hosts.txt(每行一个主机名)
- 逗号分隔:
-
返回码:除特殊选项外(例如 PsExec 的
-d),工具会把远端进程的退出码作为自身退出码返回,可直接用ERRORLEVEL判断。
小贴士:PsTools 的帮助开关是
/?。不同于某些工具里的-h。在 PsTools 家族中,-h常常不是帮助(例如 PsExec 中-h表示“以提升令牌执行”)。
二、远程目标写法与解析规则
- 单机:
\\PC-001/\\10.10.10.10 - 多机:
\\PC-A,PC-B或\\@C:\hosts.txt - 域环境:优先使用 FQDN(DNS 必须可解析),时间要同步(Kerberos)。
- 工作组:推荐显式
-u/-p指定凭据,或使用统一的本地管理员账户(合规前提)。
示例(PsExec 批量执行):
psexec \\@C:\hosts.txt -accepteula -nobanner ipconfig /all
三、备用凭据与安全要点
-
显式凭据:
-u 域\用户 -p 密码。仅给-u会安全提示输入密码。 -
最小权限:仅授予所需权限的域账户,避免使用域管做日常任务。
-
UAC/本地管理员限制(工作组常见):
若远程执行遭遇权限被“降权”,可在合规评估后于目标机设置:reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System ^/v LocalAccountTokenFilterPolicy /t REG_DWORD /d 1 /f -
防火墙与端口:SMB 445/TCP、RPC 135/TCP + 动态 RPC 端口(默认 49152–65535/TCP)需可达;开启“文件和打印机共享”。
-
安全软件白名单:允许 PsTools 创建/运行远程服务(如 PsExec 的
PSEXESVC)。
示例(显式凭据):
psexec \\PC-001 -u CORP\ops -p ******** whoami /groups
四、输出与返回码:怎么“收口”最靠谱
- 标准输出/错误:默认回显到本机控制台,可直接重定向到文件。
- 远端返回码:不加
-d的情况下,%ERRORLEVEL%即为远端进程退出码。
把每台主机的结果落到独立文件里(批处理写法):
@echo off
set LOG=D:\psexec-logs
if not exist "%LOG%" md "%LOG%"
for /f %%h in (C:\hosts.txt) do (echo === %%h ===psexec \\%%h -accepteula -nobanner ipconfig /all > "%LOG%\%%h.txt" 2>&1echo ExitCode=!ERRORLEVEL! >> "%LOG%\%%h.txt"
)
五、批量执行三连:采集 → 变更 → 验证
以 PsInfo / PsService / PsExec 为例,给出一个“可复制”的批量套路。
1) 采集:系统信息与磁盘空间
for /f %%h in (C:\hosts.txt) do (psinfo \\%%h -accepteula -nobanner -d -h > D:\audit\%%h-sysinfo.txt
)
-d输出磁盘信息;-h在 PsInfo 中表示包含 Hotfix 列表(不是帮助)。
2) 变更:远程重启某项服务(示例:Spooler)
for /f %%h in (C:\hosts.txt) do (psservice \\%%h -accepteula -nobanner stop Spoolerpsservice \\%%h -accepteula -nobanner start Spooler
)
3) 验证:探测服务状态 + 进程存在性
for /f %%h in (C:\hosts.txt) do (psservice \\%%h -nobanner query Spooler > D:\audit\%%h-spooler.txtpslist \\%%h -nobanner spoolsv >> D:\audit\%%h-spooler.txt
)
六、常见连接问题一图流(简表版)
| 现象 | 常见原因 | 速修建议 |
|---|---|---|
Access is denied | 非管理员 / UAC 限制 / Admin$ 关闭 | 用管理员凭据;开启 Admin$;必要时调整上文策略 |
The RPC server is unavailable | 135/动态端口被拦 | 放行 RPC / 动态端口;确认主机在线 |
The network path was not found | DNS 解析失败 / 名称错误 | 用 FQDN 或 IP 测试;校验 DNS 记录 |
| 长时间卡住 | 防火墙/EDR 拦截 PSEXESVC | 加白名单;在变更窗口测试 |
| 返回码异常 | 使用了 -d(不等待) | 去掉 -d,或改为拉取日志验证 |
详细排错会在 7.3《远程 PsTools 连接排错》 展开。
七、脚本化最佳实践
-accepteula -nobanner常驻,日志更干净。- 日志分主机+时间戳:
%DATE%_%TIME%或 ISO 时间,便于回溯。 - 先单机后批量:试点成功再并发跑。
- 权限最小化:按任务拆分服务账号。
- 加入“探测—执行—回验”闭环:每一步有证据链。
八、即抄即用的“远程体检”一条龙(单机)
:: 1) 通断与身份
psexec \\PC-001 -nobanner whoami && echo OK || echo FAIL:: 2) 基本资产
psinfo \\PC-001 -nobanner -d -h > D:\audit\PC-001\sysinfo.txt:: 3) 当前登录用户 & 打开的共享文件
psloggedon \\PC-001 > D:\audit\PC-001\logon.txt
psfile \\PC-001 > D:\audit\PC-001\shares.txt:: 4) 服务健康(示例:WinRM)
psservice \\PC-001 query WinRM > D:\audit\PC-001\winrm.txt
结语
掌握了 通用选项、凭据与远程目标写法,你就能把 PsTools 很稳地纳入日常运维与自动化流水线。下一篇我们深入 7.3《远程 PsTools 连接排错》,系统化解决 “连不通、没权限、被拦截、卡超时” 等顽疾,让你的远程操作成功率直线上升。
