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

PowerShell 5.1登录脚本对本地管理员映射网络驱动器异常

问题分析与解决:管理员GPO登录脚本映射SMB驱动器不显示

核心问题

域管理员用户通过GPO登录脚本执行New-SMBMapping时,脚本日志明确显示驱动器映射成功,但Windows资源管理器和交互式Get-SMBMapping都无法看到映射结果;非管理员用户无论通过GPO还是交互式运行脚本都正常,管理员仅在交互式运行脚本时能正常看到映射。测试环境为Windows 11 Enterprise 23H2/24H2。

根本原因

这是Windows UAC虚拟化隔离机制导致的:

  • 管理员登录系统时,会同时创建两个运行上下文:标准用户上下文和管理员上下文
  • GPO登录脚本默认在标准用户上下文执行,映射的驱动器仅存在于该上下文环境中
  • 管理员默认打开的Windows资源管理器运行在管理员上下文,无法跨上下文识别标准用户环境下创建的驱动器映射
  • 交互式运行脚本时,若以管理员权限启动PowerShell,映射会直接创建在管理员上下文,因此能被资源管理器正常识别

解决方案

方案1:禁用资源管理器的UAC虚拟化(推荐)

通过组策略强制资源管理器以标准用户权限运行,使其能识别GPO脚本在标准上下文创建的映射:

  1. 打开组策略编辑器(gpedit.msc)
  2. 导航路径:计算机配置 > 管理模板 > Windows组件 > 文件资源管理器
  3. 启用**「以管理员批准模式运行文件资源管理器」**(此设置会让资源管理器以标准权限启动,消除UAC上下文隔离影响)

方案2:脚本中手动同步注册表映射配置

在New-SmbMapping执行后,手动写入用户注册表的驱动器映射配置,确保管理员上下文能读取到映射信息:

# 在Mount-NetworkDrive函数的New-SmbMapping后添加以下代码
$driveLetter = $LocalPath.TrimEnd(':')
$regPath = "HKCU:\Network\$driveLetter"

# 创建或更新注册表项
if (-not (Test-Path $regPath)) {
    New-Item -Path $regPath -Force | Out-Null
}
Set-ItemProperty -Path $regPath -Name RemotePath -Value $RemotePath
Set-ItemProperty -Path $regPath -Name Persistent -Value 1
Set-ItemProperty -Path $regPath -Name UserName -Value $env:USERNAME

方案3:改用组策略首选项映射驱动器

放弃PowerShell脚本,直接使用组策略内置的驱动器映射功能,该功能会自动处理UAC上下文隔离问题:

  1. 打开组策略编辑器,导航到用户配置 > 首选项 > Windows设置 > 驱动器映射
  2. 创建新的驱动器映射项,配置盘符、共享路径、持久化等属性
  3. 应用组策略后,管理员用户登录时会自动完成映射,且资源管理器能正常识别

验证步骤

修改完成后,让管理员用户重新登录,执行以下操作验证:

  1. 打开Windows资源管理器,检查目标驱动器是否显示
  2. 运行Get-SMBMapping命令,确认映射条目存在
  3. 重启系统后再次验证,确保映射具备持久化能力

内容的提问来源于stack exchange,提问作者JWW-CSISD

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 03:50:01