当前位置: 首页 > web >正文

python 提交 命令到远程windows服务器并获取作业进程id

在Python中,你可以使用多种方式来提交命令到远程Windows服务器并获取作业进程ID。以下是几种常见的方法:

方法1:使用paramiko(SSH库)
paramiko是一个用于进行SSHv2的Python库,可以用来连接到远程服务器并执行命令。

首先,你需要安装paramiko:

pip install paramiko

然后,你可以使用以下代码连接到远程Windows服务器并执行命令:

import paramiko# 创建SSH对象
ssh = paramiko.SSHClient()
# 允许连接不在know_hosts文件中的主机
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())# 连接服务器
ssh.connect(hostname='your_server_ip', port=22, username='your_username', password='your_password')# 执行命令并获取输出和进程ID(例如使用Windows的tasklist命令来获取PID)
stdin, stdout, stderr = ssh.exec_command('tasklist /FI "IMAGENAME eq cmd.exe" /FO CSV')
output = stdout.read().decode()
print(output)# 关闭连接
ssh.close()

方法2:使用pypsexec(适用于执行PowerShell命令)
如果你需要执行PowerShell命令或需要更高级的Windows管理任务,可以使用pypsexec。首先,安装pypsexec:

pip install pypsexec

然后,你可以使用以下代码:

from pypsexec import Service, EXECSVC_PORT, EXECSVC_PIPE_NAME, EXECSVC_PIPE_TIMEOUT, EXECSVC_PIPE_BUFSIZE, EXECSVC_PIPE_MAXINSTANCES, EXECSVC_PIPE_FIRSTINSTANCE, EXECSVC_PIPE_ACCESS, EXECSVC_PIPE_SHAREMODE, EXECSVC_PIPE_OPTIONS, EXECSVC_PIPE_MODE, EXECSVC_PIPE_SECURITYATTRIBUTES, EXECSVC_PIPE_CREATIONDISPOSITION, EXECSVC_PIPE_SECURITYQUALITYOFSERVICE, EXECSVC_PIPE_CREATIONDISPOSITION, EXECSVC_PIPE_SECURITYQUALITYOFSERVICE, pypsexec, EXECSVC_PIPE_SECURITYATTRIBUTES, EXECSVC_PIPE_SECURITYQUALITYOFSERVICE, pypsexec.psexec
from pypsexec import pypsexec as psexec
import win32con# 创建远程执行服务对象
service = Service(hostname='your_server', username='your_username', password='your_password')
service.connect()# 执行命令并获取输出和进程ID(例如使用PowerShell获取特定进程的PID)
result = service.execute('Get-WmiObject Win32_Process | Where-Object {$_.Name -eq "notepad.exe"} | Select-Object ProcessId')
print(result)# 关闭连接
service.disconnect()

方法3:使用winrm库(适用于WS-Management协议)
winrm是另一种与Windows远程管理相关的Python库,可以用来执行远程PowerShell命令。首先,安装winrm:

pip install winrm

然后,你可以使用以下代码:

from winrm.protocol import Protocol
import xml.etree.ElementTree as ET  # 用于解析WS-Man返回的XML输出# 创建WinRM会话对象
session = Protocol(endpoint='http://your_server:5985/wsman',  # 可能需要HTTPS和端口5986,取决于你的配置和证书情况transport='ntlm',  # 或者 'kerberos',取决于你的认证方式username='your_username', password='your_password'  # 明文密码或通过Kerberos认证时不需要提供密码(但需要配置Kerberos认证)
)  # 对于Kerberos认证,可能需要额外的配置如realm等。 # session.transport.set_kerberos('<your-kerberos-principal>', '<your-keytab-path>')  # Kerberos配置示例。 注释掉上面的password行。 # session.transport.set_kerberos_realm('<your-kerberos-realm>')  # 如果需要设置Kerberos领域。 注释掉上面的password行。 # session.transport.set_kerberos_config('<path-to-krb5.conf>')  #  如果需要指定Kerberos配置文件路径。 注释掉上面的password行
http://www.xdnf.cn/news/7730.html

相关文章:

  • ABAP - SAP与企业微信集成-推送文件到企业微信
  • DeepSeek提示工程Prompt Engineering
  • multipart/* 响应是否必须使用 chunked 编码?
  • 常用UI自动化测试框架
  • 【Python训练营打卡】day31 @浙大疏锦行
  • 本征半导体与杂质半导体
  • Ubuntu操作系统里面安装Docker Compose
  • Python实战:打造一个功能完整的单位转换器(长度/温度/货币)
  • C++开发基础之理解std::condition_variable中的wait与wait_for的区别与使用场景
  • 基于springboot的个人博客系统【附源码】
  • 《苍穹外卖》SpringBoot后端开发项目核心知识点与技术栈整理(DAY10 to DAY12)
  • 【深度学习:理论篇】--一文理解Transformer
  • 若依项目集成sentinel、seata和shardingSphere
  • Day.js 基础用法全方位详解
  • 鸿蒙NEXT开发动画案例12
  • AI作曲革新:ACE-Step如何推动音乐创作走向大众
  • UE(虚幻)学习(六)插件打包在UE5.3.2下Value cannot be null的错误
  • Ubuntu 安装 Node.js 指定版本指南
  • 01-通过纯js理解数据驱动图表概念
  • window 显示驱动开发-GDI 硬件加速
  • 活到老学到老-Spring参数校验注解Validated /Valid
  • 实战:基于Pangolin Scrape API,如何高效稳定采集亚马逊BSR数据并破解反爬虫?
  • Nuxt.js一个基于 Vue.js 的通用应用框架
  • 使用引用的原因 和 运算符重载的必要性
  • Ubuntu20.04安装ROS Neotic
  • AI应用交付厂商F5打造六大解决方案,助用户应对复杂挑战
  • NX750HSA20美光固态闪存HSA36NC027
  • LLM驱动的未来软件工程范式与架构策略
  • 鸿蒙开发——7.ArkUI进阶:@BuilderParam装饰器的核心用法与实战解析
  • 算法题(151):保卫花园