A Python library to execute remote commands on Windows (cmd.exe and PowerShell), and to transfer files.
This is a thin wrapper on top of excellent pywinrm.
For file transfer, we use the same method as in Go package winrmcp.
pip install winrmcp
from winrmcp import Client
client = Client('my-windows-machine.com', auth=('CleverUser', 'cleverPassword'))
with client.shell() as shell:
out, _ = shell.check_cmd(['ipconfig', '/all'])
print(out)
script = """$strComputer = $Host
Clear
$RAM = WmiObject Win32_ComputerSystem
$MB = 1048576
"Installed Memory: " + [int]($RAM.TotalPhysicalMemory /$MB) + " MB" """
out, _ = shell.check_ps(script)
print(out)
client.copy('/home/mike/temp/build.bat', '%TEMP%\\build.bat')
with client.shell() as shell:
shell.check_call('cmd.exe', '/k', '%TEMP%\\build.bat)
Client
extends winrm.Session
to provide Client.shell
context-manager that opens remote shell.
See documentaiotn of pywinrm for the expected parameters.
Client.shell()
- creates a new context-managed shell, returns intsance of Shell
.
Client.copy(local_file, remote_file)
- copies the content of local file local_file
to the remote machine as remote_file
.
Note that local_file
can be a file-like object, having read
method returning bytes
.
Shell
represent the shell running on the remote Windows machine. You can get an instance of this class by
calling shell()
on a Client
instance.
Shell.cmd(command, *args)
- runs a command in remote CMD.EXE
shell. Returns winrm.Response
instance, see docs there.
Shell.ps(script)
- runs a script in remote PowerShell
shell. Returns winrm.Response
instance, see docs there.
Shell.check_cmd(command, *args)
- runs a command in remote CMD.EXE
shell. Returns a tuple of stdout and stderr strings. If remote command
return non-zero code, raises ShellCommandError
exception.
Shell.check_ps(script)
- runs a script in remote PowerShell
shell. Returns a tuple of stdout and stderr strings. If remote command
return non-zero code, raises ShellCommandError
exception.