[Win服务器] python3通过winrm远程执行windows服务器dos命令

970 0
Honkers 2025-3-5 21:33:05 | 显示全部楼层 |阅读模式

Background

  • 在实际项目中,一般使用Linux作为生产服务器,但有时就会出现一些特殊情况,你只能使用windows作为作为服务器,比如说一个用fortran编写的仿真程序,编译环境用的intel的oneAPI,按理说这个编译器是是支持windows、linux和mac平台的,但是不同平台的编译命令还不一样,无法找到相应的编译参数,没办法,只能使用windows作为服务器了。
  • python3中远程控制库中,像远程控制linux服务器的paramiko,同样也有远程控制windows服务器的pywinrm,可以远程执行 cmd、powerSehll命令。不过,需要在被控端 windows 开启 winrm 服务
  • pywinrm官方文档

1、在被控端 windows 开启 winrm 服务

  • 以管理员启动cmd

  • 启动 winrm 服务

如果遇到网络设置问题如下图1,可以win+i,然后按照下图2进行操作设置。

  1. winrm quickconfig -q
复制代码


  • 查看winrm服务的状态
  1. winrm e winrm/config/listener
  2. # 或者
  3. winrm enumerate winrm/config/listener
复制代码

  • 为winrm service 配置auth
  1. winrm set winrm/config/service/auth '@{Basic="true"}'
复制代码

  • 为winrm service 配置加密方式为允许非加密
  1. winrm set winrm/config/service '@{AllowUnencrypted="true"}'
复制代码

2、在控制端需要安装pywinrm库

  1. pip3 install pywinrm
复制代码

3、通过 pywinrm 远程执行 cmd、powerSehll命令

  1. import winrm
  2. def win_cmd(cmd: str):
  3. """远程调用 windows 执行命令"""
  4. hostname = '110.110.110.110'
  5. username = 'user1'
  6. password = '123456'
  7. wintest = winrm.Session('http://' + hostname + ':5985/wsman', auth=(username, password))
  8. res = wintest.run_cmd(cmd)
  9. if res.status_code == 0:
  10. res = res.std_out.decode().replace('\n', '').replace('\r', '')
  11. return {'sta': 200, 'res': res}
  12. else:
  13. return {'sta': 201, 'res': res.std_err}
  14. def main():
  15. """主函数"""
  16. cmd = 'python3 -V'
  17. print(win_cmd(cmd))
  18. if __name__ == '__main__':
  19. main()
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

中国红客联盟公众号

联系站长QQ:5520533

admin@chnhonker.com
Copyright © 2001-2026 Discuz Team. Powered by Discuz! X3.5 ( 粤ICP备13060014号 )|天天打卡 本站已运行