python - 如何使用 Python 访问不同/远程 Windows 机器?
问题描述
我正在使用机器A,我正在尝试通过Python访问机器B以将文件从机器B复制到机器A。
我已经尝试过这里解释的方法如何连接到远程 Windows 机器以使用 python 执行命令?,但没有运气,因为我什至无法访问远程机器。我对其他解决方案持开放态度,如果使用 Python 3+ 会更好。这是一个正在使用的代码示例。
ip = r'\\IP.IP.IP.IP'
username = r'AccountUserName'
password = r'AccountPassword'
# -------------------------------- with win32net
import win32net
import win32file
data = {
'remote': r'\\IP.IP.IP.IP\C$',
'local': 'C:',
'username': username,
'password': password
}
win32net.NetUseAdd(None, 2, data)
# -------------------------------- with wmi
import wmi
from socket import *
try:
print ("Establishing connection to %s" %ip)
connection = wmi.WMI(ip, user=username, password=password )
print ("Connection established")
except wmi.x_wmi:
print ("Your Username and Password of "+getfqdn(ip)+" are wrong.")
- 使用win32net方法
根据此处的文档https://docs.microsoft.com/en-us/windows/win32/api/lmuse/nf-lmuse-netuseadd 如果要从同一台计算机运行该函数,则该脚本正在从(A ),然后第一个参数 f NetUseAdd 可以保留为 NONE,但是我得到了错误
pywintypes.error: (87, 'NetUseAdd', 'The parameter is incorrect.')
虽然如果我用“127.0.0.1”更改它,我会收到错误消息
pywintypes.error: (50, 'NetUseAdd', 'The request is not supported.')
最后,如果我使用我尝试访问的相同 IP 更改它,我会收到错误
pywintypes.error: (1326, 'NetUseAdd', 'Logon failure: unknown user name or bad password.')
- 使用 wmi 方法
它给出了错误
Your Username and Password of \\IP.IP.IP.IP are wrong.
解决方案
可以有多种方法来实现这一点。下面给出了其中之一,它使用了内置的 Windows 实用程序。
import os
machine_b = {"ip":"10.197.145.244","user":"administrator","pwd":"abc1234"}
src = r"C:\Temp" # folder to copy from remote machine
dest = r"C:\Python27\build\temp" # destination folder on host machine
network_drive_letter = "Z:"
source_driver_letter = os.path.splitdrive(src)[0][0]
cmd = "netuse %s \\%s\%s$ %s /u:%s"%(network_drive_letter, machine_b["ip"],source_driver_letter,machine_b["pwd"],machine_b["user"])
os.system(cmd)
cmd = "robocopy %s %s /mir"%(src.replace(source_driver_letter,network_drive_letter),dest)
os.system(cmd)
您可以通过处理异常并将 os.system 替换为 subprocess.Popen 调用来改进此代码。注意:小心使用 /MIR 开关,因为它可以复制和删除主机中的文件。它创建目标文件夹的镜像。
推荐阅读
- google-cloud-platform - 为什么 Terraform 不能列出 GCP 帐户中的 SQL 用户?
- node.js - 如何在画布 nodejs 中创建渐变文本?
- javascript - 无法在 react-scroll scrollToTop 中禁用平滑滚动
- c# - C# DataTable csv IndexOutOfRangeException
- python - 如何处理xgboost分类器的过拟合?
- lambda - Stream API:从同一对象中收集基于另一个属性条件的属性列表
- django - 我在使用 docker nginx 和 gunicorn 部署我的 django 项目时遇到问题
- sql - 对 2 列求和并合并行
- java - 为什么我们必须在 Java 中的 if 语句之外声明变量
- php - iFrame - 退出全屏的问题