python + winrm 实现远程连接Windows服务器并执行指定命令的操作过程

 更新时间:2023年10月10日 14:40:20   作者:梦因you而美  
Windows远程管理(WinRM)是Windows Server 2003 R2,Windows Vista和Windows Server 2008中一种新式的方便远程管理的服务,这篇文章主要介绍了python + winrm 实现远程连接Windows服务器并执行指定命令的操作过程,需要的朋友可以参考下

查到windows服务器连接的一个强大的第三方库winrm,类似于paramiko模块(实现远程连接Linux虚拟机(服务器)并执行指定命令返回输出结果),只不过winrm是可以在Windows环境下执行命令。Windows远程管理(WinRM)是Windows Server 2003 R2,Windows Vista和Windows Server 2008中一种新式的方便远程管理的服务。

windows上开启winrm服务

winrm service 默认都是未启用的状态,先查看状态,如无返回信息,则是没有启动。

打开powershell终端,输入下列命令进行配置:

winrm enumerate winrm/config/listener

针对winrm service 进行基础配置:

winrm quickconfig

如果出现“拒绝访问”错误

解决方法:以管理员身份执行。 

查看winrm service listener:

winrm e winrm/config/listener

为winrm service 配置auth:

winrm set winrm/config/service/auth @{Basic="true"}

为winrm service 配置加密方式为允许非加密:

winrm set winrm/config/service @{AllowUnencrypted="true"}

注意:如果以上两个命令执行会报错

错误: Invalid use of command line. Type "winrm -?" for help.

需要在@{Basic="true"}外部加单引号'才可以!

启动/关闭winrm服务命令:net start/stop winrm

至此,winrm service 已经启用,可以正常使用

安装python库:winrm

安装方法如下:

pip install pywinrm

这里进行了简单的实践,远程连接Windows服务器后查询服务器的IP信息:

代码如下:

import winrm
def winCMD(hostip='hostip', username='username', password='password'):
    """
    在 windows 下执行命令
    :param hostip: 远程Windows服务器IP
    :param username: 远程Windows服务器用户名
    :param password: 远程Windows服务器密码
    :return:
    """
    wintest = winrm.Session('http://' + hostip + ':5985/wsman', auth=(username, password))
    # ret = wintest.run_cmd("cmd命令") 多个命令使用 & 符号连接
    ret = wintest.run_cmd("ipconfig")
    print(ret)
    # 正常输出信息
    print(ret.std_out.decode())
    # 错误信息
    print(ret.std_err.decode())

 注:输出中文乱码问题解决方法,run_cmd()方法,修改self.protocol.open_shell(codepage=936)参数

def run_cmd(self, command, args=()):
    # TODO optimize perf. Do not call open/close shell every time
    # 中文编码 codepage=936, 英文编码codepage=437
    shell_id = self.protocol.open_shell(codepage=936)
    command_id = self.protocol.run_command(shell_id, command, args)
    rs = Response(self.protocol.get_command_output(shell_id, command_id))
    self.protocol.cleanup_command(shell_id, command_id)
    self.protocol.close_shell(shell_id)
    return rs

再记一些 winrm 比较常用的命令

winrm 这个命令在服务器端为什么是client的呢?我发现如果按照正常的命令来输入的话应该是没有问题的,我相信这个问题不是一个很难的问题,因为powershell远程管理windows是系统管理员必备的功能,必须实现,我觉得这几种防范已经把问题解决了,我只要慢慢搞应该能搞出来

执行以下命令能够以每组多达50个实例的速度获取实例。

winrm set winrm/config @{MaxBatchItems="50"}

此外,通过增大分配的最大封包大小和超时设置,也可以提高性能。

winrm set winrm/config @{MaxEnvelopeSizekb="150"}
winrm set winrm/config @{MaxTimeoutms ="60000"}

下面列出了其他可选的WinRM配置命令,以便您参考。要获取当前的WinRM配置设置,请执行以下命令:

winrm g winrm/config

默认情况下,客户端计算机要求对网络流量加密。要允许客户端计算机请求未加密流量,请执行以下命令:

winrm s winrm/config/Client @{AllowUnencrypted="true"}

TrustedHosts 是一个数组,用于指定可信的远程计算机的列表。同一工作组中的其他计算机或不同域中的计算机均应添加到此列表中。

注意:TrustedHosts 列表中的计算机未经过身份验证。

执行以下命令可将所有计算机都纳入TrustedHosts。

winrm s winrm/config/Client @{TrustedHosts="*"}

基本身份验证是以明文形式将用户名和密码发送给服务器或代理的方案。这是最不安全的身份验证方法。默认值为True。

执行以下命令可将客户端计算机设置为使用基本身份验证:

winrm s winrm/config/Client/Auth @{Basic="true"}

到此这篇关于python + winrm 实现远程连接Windows服务器,并执行指定命令的文章就介绍到这了,更多相关python winrm 远程连接Windows服务器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Pygame Event事件模块的详细示例

    Pygame Event事件模块的详细示例

    事件是Pygame的重要模块之一,比如鼠标点击、键盘敲击、游戏窗口移动、调整窗口大小、触发特定的情节、退出游戏等等,本文就详细的介绍一下具体用法,感兴趣的可以了解一下
    2021-11-11
  • Python数字图像处理代数之加减乘运算

    Python数字图像处理代数之加减乘运算

    这篇文章主要介绍了Python数字图像处理代数运算,对其中的加、减、乘运算分别作了详细的讲解,有需要的朋友可以借鉴参考下,希望能够有所帮助
    2021-09-09
  • Python基础教程之Pandas数据分析库详解

    Python基础教程之Pandas数据分析库详解

    Pandas是一个基于 NumPy 的非常强大的开源数据处理库,它提供了高效、灵活和丰富的数据结构和数据分析工具,本文中,我们将学习如何使用Pandas来处理和分析数据,感兴趣的小伙伴跟着小编一起来看看吧
    2023-07-07
  • Python执行速度慢的原因及全面优化方案

    Python执行速度慢的原因及全面优化方案

    Python 作为解释型语言确实存在一些性能瓶颈,但通过深入理解其底层机制并采取合适的优化策略,可以显著提升执行效率,以下是系统的原因分析和优化方法,需要的朋友可以参考下
    2025-07-07
  • python3 使用traceback定位异常实例

    python3 使用traceback定位异常实例

    这篇文章主要介绍了python3 使用traceback定位异常实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-03-03
  • Python正则表达式的另类解答

    Python正则表达式的另类解答

    这篇文章主要为大家详细介绍了Python正则表达式,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-02-02
  • Python 中urls.py:URL dispatcher(路由配置文件)详解

    Python 中urls.py:URL dispatcher(路由配置文件)详解

    这篇文章主要介绍了Python 中urls.py:URL dispatcher(路由配置文件)详解的相关资料,需要的朋友可以参考下
    2017-03-03
  • python处理变量交换与字符串及判断的小妙招

    python处理变量交换与字符串及判断的小妙招

    本文记录一些 Python 日常编程中的小妙招,并使用 IPython 进行交互测试,让我们更好的了解和学习 Python 的一些特性,对大家的学习或工作具有一定的价值,需要的朋友可以参考下
    2021-09-09
  • 一文详解如何使用Python从字符串中提取数字

    一文详解如何使用Python从字符串中提取数字

    这篇文章主要给大家介绍了关于如何使用Python从字符串中提取数字的相关资料,我们在进行数据处理时候,可能想要提取字符串中的数字进行分析,需要的朋友可以参考下
    2023-11-11
  • Sphinx环境配置及VScode编写Rst文档转html的步骤

    Sphinx环境配置及VScode编写Rst文档转html的步骤

    sphinx主要用于编写 reStructuredText 和 Markdown 格式技术文档,编写此类技术文档时Sphinx工具可将其转为html、pdf、ePub等格式,这篇文章主要介绍了Sphinx环境配置及VScode编写Rst文档转html,需要的朋友可以参考下
    2023-03-03

最新评论