Primero, debe configurar winrm en Windows para asegurarse de que puede conectarse y controlar:
consulte el enlace
Tome mi propia computadora como ejemplo: use 192.168.64.84 (win10) para conectarse a 192.168.64.80 (win7) y controlar.
Aquí hay un ejemplo de cómo eliminar una imagen de win7:
import winrm
import time
s=winrm.Session('http://192.168.64.80:5985/wsman',auth=('admin','000000'))
time.sleep(5)
s.keep_alive = False
comm="del/f/s/q "+r"C:\Users\liuyan\Desktop\1.jpg"
t=s.run_cmd(comm)
print(t.std_out)
print("******")
print(t.std_err)
print("******")
Los resultados de la operación son:
b'Deleted file - C:\\Users\\admin\\Desktop\\1.jpg\r\n'
******
b''
******
Y en una PC con win7, la imagen también se eliminará.
Si desea ejecutar varios comandos, use & para separar:
t=s.run_cmd('dir & cd / & dir')
Se generarán dos listas y los resultados en ejecución no son fáciles de publicar.
Mencione run_cmd () y run_ps (): el
primero ejecuta comandos y el segundo ejecuta scripts.
def run_cmd(self, command, args=()):
# TODO optimize perf. Do not call open/close shell every time
shell_id = self.protocol.open_shell()
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
def run_ps(self, script):
"""base64 encodes a Powershell script and executes the powershell
encoded script command
"""
# must use utf16 little endian on windows
encoded_ps = b64encode(script.encode('utf_16_le')).decode('ascii')
rs = self.run_cmd('powershell -encodedcommand {0}'.format(encoded_ps))
if len(rs.std_err):
# if there was an error message, clean it it up and make it human
# readable
rs.std_err = self._clean_error_msg(rs.std_err)
return rs
Pero también encontré un problema, es decir, falla cuando quiero abrir una página web o aplicación, pero este comando se puede ejecutar en la línea de comandos de win7, lo que me quema el cerebro.
#comm='start '+r'https://blog.csdn.net/liulanba?spm=1001.2101.3001.5343'
#print(comm)
# s.run_cmd(comm)
# comm="start C:\GTJA\RichEZ\newVer\Loading.exe"
# t=s.run_cmd(comm)
Este problema aún no se ha resuelto, los grandes que pasan pueden pincharme, ¡muchas gracias!
Se dice que hay otro método, todavía no lo he probado, por favor regístrelo primero
import winrm
conn = winrm.Protocol(endpoint='http://10.10.60.14:5985/wsman', transport='plaintext', username='administrator', password='password')
shell_id=conn.open_shell()
com=conn.run_command(shell_id,"dir")
stdout, stderr, return_code = conn.get_command_output(shell_id, com)
print "STDOUT: %s" % (stdout)
print "STDERR: %s" % (stderr)