首页/系统/Windows 运维速查/winrs:WinRM 命令行客户端

winrs:WinRM 命令行客户端

不建 PowerShell 会话就能远程执行 CMD 命令:winrs -r:host 命令,适合脚本最简调用与快速验证 WinRM 链路。

Windows 运维速查系统更新于 2026-10-13

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 远程限制与杀毒软件策略约束,报“拒绝访问”时要一并考虑这些因素。

易错点

  • 凭据写在命令行:泄露风险高且日志中难以彻底清理
  • 相对路径直接使用:默认目录是 system32,命令找不到目标文件却报错含糊
  • 把 winrs 当长期批量方案:缺少并发控制与结构化输出,规模一大就难以维护
  • 跨域环境忘记 TrustedHosts:报错信息不直观,容易误判为目标机故障
  • 在目标机禁用 WinRM 后仍用 winrs:所有远程通道同时失效,需改用其他机制

数据来源与参考

  • Microsoft Learn:winrs 命令
  • Microsoft Learn:WinRM 概述

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌