首页 > 解决方案 > 如何使用 Python 3.x winreg 连接到远程注册表

问题描述

尝试通过python winreg连接到远程计算机的注册表时遇到问题。我正在尝试从注册表中当前登录的用户捕获映射的网络打印机。

我的代码如下:

def enumRegKeySubkeys():
    key_path = "Printers\\Connections"
    target = r"\\192.168.20.164"
    rem_reg = ConnectRegistry(target, HKEY_CURRENT_USER)
    rem_key = OpenKey(rem_reg, key_path, 0, KEY_READ | KEY_WOW64_64KEY)
    result = []
    index = 0
    while True:
        try:
            subkey = EnumKey(rem_key, index)
            result.append(subkey)
            index += 1
        except EnvironmentError:
    return result

当我运行它时,我收到错误消息:

回溯(最近一次调用最后)文件“.\test2.py”,第 21 行,在 print(enumRegKeySubkeys()) 文件“.\test2.py”,第 8 行,在 enumRegKeySubkeys rem_key = OpenKey(rem_reg, key_path, 0, KEY_READ | KEY_WOW64_64KEY) FileNotFoundError: [WinError 2] 系统找不到指定的文件

如果我在本地运行它

rem_reg = ConnectRegistry(None, HKEY_CURRENT_USER)

那么就没有问题了,我得到了我想要的。

这一切都发生在 Windows 域环境中,以管理(域)权限运行,并且客户端上的远程注册表服务正在运行。

提前感谢您的帮助!

标签: pythonwindowsdnsregistrywinreg

解决方案


其实ConnectRegistry(target, HKEY_CURRENT_USER)相当于dos命令reg query \\target\HKEY_CURRENT_USER,是无效的,因为远程服务器的reg查询只能用于 HKLMHKU

在dos窗口中输入reg query /?,可以看到:

[\\Machine\]FullKey: Machine - Name of remote machine, omitting defaults to the current machine. Only HKLM(HKEY_LOCAL_MACHINE) and HKU(HKEY_USERS) are available on remote machines


推荐阅读