• python3通过winrm远程执行windows服务器dos命令


    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进行操作设置。

    winrm quickconfig -q
    
    • 1

    在这里插入图片描述
    在这里插入图片描述

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

    在这里插入图片描述

    • 为winrm service 配置auth
    winrm set winrm/config/service/auth '@{Basic="true"}'
    
    • 1

    在这里插入图片描述

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

    在这里插入图片描述

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

    pip3 install pywinrm
    
    • 1

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

    import winrm
    
    
    def win_cmd(cmd: str):
        """远程调用 windows 执行命令"""
        hostname = '110.110.110.110'
        username = 'user1'
        password = '123456'
        wintest = winrm.Session('http://' + hostname + ':5985/wsman', auth=(username, password))
        res = wintest.run_cmd(cmd)
        if res.status_code == 0:
            res = res.std_out.decode().replace('\n', '').replace('\r', '')
            return {'sta': 200, 'res': res}
        else:
            return {'sta': 201, 'res': res.std_err}
        
    
    def main():
        """主函数"""
        cmd = 'python3 -V'
        print(win_cmd(cmd))
    
    
    if __name__ == '__main__':
        main()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
  • 相关阅读:
    牛牛的等差数列(思维 + 线段树)
    【Spring boot 返回 json 数据】
    Cocos 进度条物体跟随效果
    Linux简单命令学习 -- cat more echo
    前端学习笔记
    前端vue学习笔记(1)
    计算机网络作业(存储单位k、KB、MB、GB、TB、PB;手机运行内存和内存的区别)
    Shell(5)数组
    初学unity开发学习笔记----第一天
    css:overflow-y属性
  • 原文地址:https://blog.csdn.net/qq_42761569/article/details/128185579