python + winrm 實(shí)現(xiàn)遠(yuǎn)程連接Windows服務(wù)器并執(zhí)行指定命令的操作過程
查到windows服務(wù)器連接的一個(gè)強(qiáng)大的第三方庫winrm,類似于paramiko模塊(實(shí)現(xiàn)遠(yuǎn)程連接Linux虛擬機(jī)(服務(wù)器)并執(zhí)行指定命令返回輸出結(jié)果),只不過winrm是可以在Windows環(huán)境下執(zhí)行命令。Windows遠(yuǎn)程管理(WinRM)是Windows Server 2003 R2,Windows Vista和Windows Server 2008中一種新式的方便遠(yuǎn)程管理的服務(wù)。
windows上開啟winrm服務(wù)
winrm service 默認(rèn)都是未啟用的狀態(tài),先查看狀態(tài),如無返回信息,則是沒有啟動(dòng)。
打開powershell終端,輸入下列命令進(jìn)行配置:
winrm enumerate winrm/config/listener
針對(duì)winrm service 進(jìn)行基礎(chǔ)配置:
winrm quickconfig
如果出現(xiàn)“拒絕訪問”錯(cuò)誤
解決方法:以管理員身份執(zhí)行。
查看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"}注意:如果以上兩個(gè)命令執(zhí)行會(huì)報(bào)錯(cuò)
錯(cuò)誤: Invalid use of command line. Type "winrm -?" for help.
需要在@{Basic="true"}外部加單引號(hào)'才可以!
啟動(dòng)/關(guān)閉winrm服務(wù)命令:net start/stop winrm
至此,winrm service 已經(jīng)啟用,可以正常使用
安裝python庫:winrm
安裝方法如下:
pip install pywinrm
這里進(jìn)行了簡(jiǎn)單的實(shí)踐,遠(yuǎn)程連接Windows服務(wù)器后查詢服務(wù)器的IP信息:
代碼如下:
import winrm
def winCMD(hostip='hostip', username='username', password='password'):
"""
在 windows 下執(zhí)行命令
:param hostip: 遠(yuǎn)程Windows服務(wù)器IP
:param username: 遠(yuǎn)程Windows服務(wù)器用戶名
:param password: 遠(yuǎn)程Windows服務(wù)器密碼
:return:
"""
wintest = winrm.Session('http://' + hostip + ':5985/wsman', auth=(username, password))
# ret = wintest.run_cmd("cmd命令") 多個(gè)命令使用 & 符號(hào)連接
ret = wintest.run_cmd("ipconfig")
print(ret)
# 正常輸出信息
print(ret.std_out.decode())
# 錯(cuò)誤信息
print(ret.std_err.decode())注:輸出中文亂碼問題解決方法,run_cmd()方法,修改self.protocol.open_shell(codepage=936)參數(shù)
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 這個(gè)命令在服務(wù)器端為什么是client的呢?我發(fā)現(xiàn)如果按照正常的命令來輸入的話應(yīng)該是沒有問題的,我相信這個(gè)問題不是一個(gè)很難的問題,因?yàn)閜owershell遠(yuǎn)程管理windows是系統(tǒng)管理員必備的功能,必須實(shí)現(xiàn),我覺得這幾種防范已經(jīng)把問題解決了,我只要慢慢搞應(yīng)該能搞出來
執(zhí)行以下命令能夠以每組多達(dá)50個(gè)實(shí)例的速度獲取實(shí)例。
winrm set winrm/config @{MaxBatchItems="50"}此外,通過增大分配的最大封包大小和超時(shí)設(shè)置,也可以提高性能。
winrm set winrm/config @{MaxEnvelopeSizekb="150"}
winrm set winrm/config @{MaxTimeoutms ="60000"}下面列出了其他可選的WinRM配置命令,以便您參考。要獲取當(dāng)前的WinRM配置設(shè)置,請(qǐng)執(zhí)行以下命令:
winrm g winrm/config
默認(rèn)情況下,客戶端計(jì)算機(jī)要求對(duì)網(wǎng)絡(luò)流量加密。要允許客戶端計(jì)算機(jī)請(qǐng)求未加密流量,請(qǐng)執(zhí)行以下命令:
winrm s winrm/config/Client @{AllowUnencrypted="true"}TrustedHosts 是一個(gè)數(shù)組,用于指定可信的遠(yuǎn)程計(jì)算機(jī)的列表。同一工作組中的其他計(jì)算機(jī)或不同域中的計(jì)算機(jī)均應(yīng)添加到此列表中。
注意:TrustedHosts 列表中的計(jì)算機(jī)未經(jīng)過身份驗(yàn)證。
執(zhí)行以下命令可將所有計(jì)算機(jī)都納入TrustedHosts。
winrm s winrm/config/Client @{TrustedHosts="*"}基本身份驗(yàn)證是以明文形式將用戶名和密碼發(fā)送給服務(wù)器或代理的方案。這是最不安全的身份驗(yàn)證方法。默認(rèn)值為True。
執(zhí)行以下命令可將客戶端計(jì)算機(jī)設(shè)置為使用基本身份驗(yàn)證:
winrm s winrm/config/Client/Auth @{Basic="true"}到此這篇關(guān)于python + winrm 實(shí)現(xiàn)遠(yuǎn)程連接Windows服務(wù)器,并執(zhí)行指定命令的文章就介紹到這了,更多相關(guān)python winrm 遠(yuǎn)程連接Windows服務(wù)器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python數(shù)字圖像處理代數(shù)之加減乘運(yùn)算
這篇文章主要介紹了Python數(shù)字圖像處理代數(shù)運(yùn)算,對(duì)其中的加、減、乘運(yùn)算分別作了詳細(xì)的講解,有需要的朋友可以借鑒參考下,希望能夠有所幫助2021-09-09
Python基礎(chǔ)教程之Pandas數(shù)據(jù)分析庫詳解
Pandas是一個(gè)基于 NumPy 的非常強(qiáng)大的開源數(shù)據(jù)處理庫,它提供了高效、靈活和豐富的數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)分析工具,本文中,我們將學(xué)習(xí)如何使用Pandas來處理和分析數(shù)據(jù),感興趣的小伙伴跟著小編一起來看看吧2023-07-07
Python執(zhí)行速度慢的原因及全面優(yōu)化方案
Python 作為解釋型語言確實(shí)存在一些性能瓶頸,但通過深入理解其底層機(jī)制并采取合適的優(yōu)化策略,可以顯著提升執(zhí)行效率,以下是系統(tǒng)的原因分析和優(yōu)化方法,需要的朋友可以參考下2025-07-07
python3 使用traceback定位異常實(shí)例
這篇文章主要介紹了python3 使用traceback定位異常實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-03-03
Python 中urls.py:URL dispatcher(路由配置文件)詳解
這篇文章主要介紹了Python 中urls.py:URL dispatcher(路由配置文件)詳解的相關(guān)資料,需要的朋友可以參考下2017-03-03
Sphinx環(huán)境配置及VScode編寫Rst文檔轉(zhuǎn)html的步驟
sphinx主要用于編寫 reStructuredText 和 Markdown 格式技術(shù)文檔,編寫此類技術(shù)文檔時(shí)Sphinx工具可將其轉(zhuǎn)為html、pdf、ePub等格式,這篇文章主要介紹了Sphinx環(huán)境配置及VScode編寫Rst文檔轉(zhuǎn)html,需要的朋友可以參考下2023-03-03

