You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在管理员权限运行的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 12:48:03