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属于高权限上下文,和普通用户上下文隔离,因此看不到其他上下文创建的驱动器
解决方案
优先使用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 }}"若必须用PowerShell,需在用户交互式会话上下文执行
- 通过Windows计划任务配置,指定在用户登录时执行映射命令,确保驱动器在用户会话中创建
- 借助工具在目标用户的会话中执行PowerShell命令,但这种方式需要额外工具支持,可靠性不如官方模块
验证映射配置
可在Ansible任务中添加步骤,检查目标用户注册表项HKEY_CURRENT_USER\Network,确认网络驱动器的持久化配置是否正确写入用户注册表 hive。
内容的提问来源于stack exchange,提问作者Paulina Nowacka
相关产品推荐
相关产品推荐

