当前位置: 首页 > 科技观察

用Python远程控制Windows服务器,太好用了!

时间:2023-03-19 11:48:37 科技观察

在很多企业中,闲置的Windows机器被用作临时服务器。有时我们想远程调用程序或查看日志文件。Windows内置服务“winrm”可以满足我们的需求。它是一种基于标准简单对象访问协议(SOAP)的防火墙友好协议,允许来自不同供应商的硬件和操作系统进行互操作。官方网站:https://docs.microsoft.com/en-us/windows/win32/winrm/portal1。Windows10被用作受控端窗口的示例。具体操作步骤如下:1.1启动winrm服务以管理员权限打开CMD命令窗口,输入以下命令启动winrm服务。#启动winrm服务winrmquickconfig-q运行时如果报错,会提示网络类型设置异常。可以使用快捷键win+i进入网络和Internet,更改网络配置文件,从公网切换到私网。1.2查看winrm服务的监控状态继续在命令行输入以下命令查看winrm服务的状态。PS:注意这里的端口号Port值在后面的连接中会用到。#查看winrm服务状态winrmewinrm/config/listener#结果ListenerAddress=*Transport=HTTPPort=5985HostnameEnabled=trueURLPrefix=wsmanCertificateThumbprintListeningOn=**1.3通过以下命令查看winrm配置信息(可选)查看winrm的所有配置信息,client客户端配置信息,serviceserver配置信息。#所有winrm获取winrm/config#Clientwinrm获取winrm/config/client#Servicewinrm获取winrm/config/service1.4配置winrm客户端#配置winrm客户端winrmsetwinrm/config/client@{AllowUnencrypted="true"}winrmsetwinrm/config/client@{TrustedHosts="*"}winrmsetwinrm/config/client/auth@{Basic="true"}1.5配置winrm服务配置好winrm服务和winrm客户端后,我们可以通过步骤1-3配置查看文件,确保配置文件已经生效。#配置winrmservicewinrmsetwinrm/config/service@{AllowUnencrypted="true"}winrmsetwinrm/config/service/auth@{Basic="true"}2.控制端在控制端,如:MacOSX、Linux,我们只需要安装“pywinrm”依赖包即可。#在控制端安装依赖包pip3installpywinrm3.经过实战和以上准备工作,我们就可以编写代码来控制Windows了。首先我们需要ip地址、端口号、用户名和密码来连接到Windows被控端。#连接windowsimportwinrm...#ip地址:端口号#winrm服务器端口号#auth:用户名和密码self.session=winrm.Session("192.168.**.**:5985",auth=('username','password'),transport='ntlm')...这样我们就可以通过对象的“run_cmd”和“run_ps”函数模拟CMD和PowerShell输入命令。下面是一个查看Windows硬盘目录下日志文件的例子:#Connectwindowsimportwinrmimportcodecs...defexec_cmd(self,cmd):"""执行cmd命令,得到返回值:paramcmd::return:"""#CMDresult=self.session.run_cmd(cmd)#powerShell#result=self.session.run_ps(cmd)#returncode#code为0表示调用成功code=result.status_code#根据returncode,获取响应内容(bytes)content=result.std_outifcode==0elseresult.std_err#转换为字符串(尝试通过UTF8、GBK解码)#result=content.decode("utf8")#result=codecs.decode(content,'UTF-8')try:result=content.decode("utf8")except:result=content.decode("GBK")print(result)returnresult...#打开文件D:/py/log/trade.log#Windows使用type命令查看文件内容result=self.exec_cmd('D:&cdpy\\log&typetrade.log')#查看结果print(result)4.总结除了远程查看Windows文件,哟也可以执行bat批处理文件,或者模拟命令行输入,根据返回值进行其他操作。