winrs 是干什么的
winrs 是 WinRM 的命令行客户端,用来在不建立 PowerShell 会话的情况下,对远端执行一条 CMD 命令并把输出带回来。它比 Invoke-Command 更轻,适合脚本里最简单直接的调用,也常被用来快速验证 WinRM 链路本身是否通。前提是目标机已启用 WinRM,同域一般走 Kerberos,跨域或工作组环境需要额外配置信任。
基本信息
| 适用平台 | Windows Vista / Server 2008 及以上(含 CMD) |
|---|---|
| 语法 | winrs -r:主机 命令 [参数] |
| 常用参数 | -r 远端主机;-u/-p 指定凭据;-d 不等待;-c 超时时间 |
| 前提条件 | 目标启用 WinRM 与防火墙放行;同域走 Kerberos |
| 相关命令 | winrm quickconfig / winrm get winrm/config |
典型使用场景
- 链路验证:确认 WinRM 是否可用,再决定后续用 Invoke-Command 还是别的通道
- 脚本里执行单条命令:取主机名、查服务、跑一条 ipconfig
- 快速取证:远端收集简要系统信息到本地控制台
- 多机批处理的简易替代:配合 for 循环在 CMD 脚本里使用
- 跨平台脚本:在 CMD 环境里完成远程执行,不需要 PowerShell
常用示例
常用示例
:: 基础:远端取主机名
winrs -r:web01 hostname
:: 查网络配置
winrs -r:web01 ipconfig /all
:: 指定凭据(不建议把密码写在命令行)
winrs -r:web01 -u:CONTOSO\ops -p:****** whoami
:: 不等远端命令结束(异步下发)
winrs -r:web01 -d cmd /c "shutdown /r /t 30"
:: 目标端确认 WinRM 是否已配置
winrm quickconfig
winrm get winrm/config/service常见报错对照
| 报错 | 原因 | 处理方向 |
|---|---|---|
| 拒绝访问 | 凭据不足或非管理员 | 确认管理员身份与账户权限 |
| 无法处理请求 | WinRM 未配置或端口被拦 | 检查 WinRM 服务与防火墙规则 |
| 连接超时 | 网络或协议不通 | 先 ping 与 Test-WSMan 验证 |
| WinRM 客户端无法处理该请求 | TrustedHosts 未配置(跨域/工作组) | 配置受信主机或改用 Kerberos |
winrs 的默认工作目录在 %windir%\system32,脚本里写相对路径经常“文件找不到”。稳妥写法是先 cd 到目标目录,或直接使用绝对路径。
在命令行里用 -p 传明文密码会进入命令历史、进程命令行与审计日志,属于高危做法。改用凭据交互输入或改用 Invoke-Command 配合凭据对象更稳妥。
winrs 与 PowerShell 的 Authenticode 执行策略无关,但远端命令仍是普通进程,受目标机权限、UAC 远程限制与杀毒软件策略约束,报“拒绝访问”时要一并考虑这些因素。