如何在管理员权限运行的Python脚本中获取映射盘符对应的IP/主机名
管理员权限下Python获取Windows映射盘符对应主机地址方案
问题背景
- 需求:在以管理员权限运行的Python脚本中,获取映射盘符对应的主机名、IP地址及完整UNC路径
- 原有实现缺陷:普通权限下调用
win32wnet.WNetGetUniversalName可以正常返回结果,但管理员权限下会报错,无法查询到对应映射信息 - 根因:Windows用户上下文隔离机制会将普通用户、管理员用户的网络盘符映射信息分开存储,普通用户挂载的盘符默认在管理员会话中无法通过网络API直接查询到
兼容全权限的实现方案
通过「原生API优先+注册表兜底」的逻辑同时兼容普通、管理员权限场景,代码实现如下:
import win32wnet import sys import winreg def get_unc_path(drive_path): # 优先调用原生网络API查询,适配普通权限场景 try: return win32wnet.WNetGetUniversalName(drive_path, 1) except Exception: # 管理员权限场景下从当前用户注册表读取映射配置 drive_letter = drive_path[0].upper() try: with winreg.OpenKey(winreg.HKEY_CURRENT_USER, f"Network\\{drive_letter}") as reg_key: remote_root = winreg.QueryValueEx(reg_key, "RemotePath")[0] # 拼接盘符下的剩余路径 if len(drive_path) > 3: return f"{remote_root}\\{drive_path[3:]}" return remote_root except Exception as e: return f"查询失败:{str(e)}" if __name__ == "__main__": target_path = sys.argv[1] unc_result = get_unc_path(target_path) print(unc_result) # 提取对应主机名/IP if unc_result.startswith("\\\\"): host_info = unc_result.split("\\")[2] print(f"对应主机名/IP:{host_info}")
调用效果
普通/管理员权限下调用输出示例:
C:\test>python get_unc.py i:\some\path \\machine\test_share\some\path 对应主机名/IP:machine
内容的提问来源于stack exchange,提问作者rafael
相关产品推荐
相关产品推荐

