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

Ansible通过PowerShell映射网络驱动器后RDP无法查看问题

问题:Ansible执行网络驱动器映射任务返回成功,但RDP登录后看不到映射的T盘

具体现象:

  • Ansible通过win_shell执行PowerShell命令完成网络驱动器映射,任务返回“Successful”
  • RDP登录目标客户端后,文件资源管理器中找不到T盘
  • 非管理员权限打开PowerShell,看不到T盘
  • 管理员权限PowerShell仅显示另一用户手动映射的Z盘

执行的Ansible剧本任务如下(变量已正确替换):

-
  name: Step 9 Map a network drive with new credentials - tag share_mod
  win_shell: $driveLetter = "T" ; $networkPath = "{{ fs_path }}" ; $username = "{{ fs_acc }}" ; $securePassword = ConvertTo-SecureString -String "{{ fs_acc_pwd }}" -AsPlainText -Force ; $credential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $username, $securePassword ; New-PSDrive -Name $driveLetter -PSProvider "FileSystem" -Root $networkPath -Credential $credential  -Persist
  tags:
    - share_add

问题原因

核心是Ansible执行任务的上下文和用户RDP登录的交互式会话完全隔离:

  • Ansible默认以SYSTEM账户或指定的远程执行账户运行,该账户的会话与用户RDP的交互式会话是独立的
  • New-PSDrive -Persist创建的持久化驱动器绑定到当前执行会话的用户上下文,只有在同一个用户会话中才能看到
  • 管理员权限PowerShell属于高权限上下文,和普通用户上下文隔离,因此看不到其他上下文创建的驱动器

解决方案

  1. 优先使用Ansible官方win_mapped_drive模块
    该模块专门针对Windows网络驱动器映射设计,自动处理用户上下文问题,确保驱动器在用户交互式会话中可见:

    - name: Map T drive to network share
      win_mapped_drive:
        letter: T
        path: "{{ fs_path }}"
        state: present
        username: "{{ fs_acc }}"
        password: "{{ fs_acc_pwd }}"
    
  2. 若必须用PowerShell,需在用户交互式会话上下文执行

    • 通过Windows计划任务配置,指定在用户登录时执行映射命令,确保驱动器在用户会话中创建
    • 借助工具在目标用户的会话中执行PowerShell命令,但这种方式需要额外工具支持,可靠性不如官方模块
  3. 验证映射配置
    可在Ansible任务中添加步骤,检查目标用户注册表项HKEY_CURRENT_USER\Network,确认网络驱动器的持久化配置是否正确写入用户注册表 hive。

内容的提问来源于stack exchange,提问作者Paulina Nowacka

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 14:34:58