Azure File Share通过PowerShell脚本映射网络驱动器无法持久生效问题
问题原因
- 该问题由PowerShell默认的进程隔离机制导致:直接运行
.ps1脚本时,系统会启动独立的子PowerShell进程执行脚本内容,子进程内创建的网络驱动器映射仅属于该进程的局部上下文。脚本执行完成后子进程自动退出,局部映射会被系统回收,不会同步到你打开的交互式PowerShell窗口、资源管理器的全局上下文。 - 手动将代码粘贴到PowerShell窗口执行时,代码运行在当前的交互式父进程内,映射属于全局上下文,因此可以正常保留。
- 脚本末尾加
pause后映射暂时可用,是因为pause阻止了子进程退出,子进程运行期间局部映射暂存,按回车结束子进程后映射自然被清理。
解决方法
方案1:使用点源调用脚本,让代码运行在当前进程上下文
执行脚本时在脚本路径前加英文句号加空格,采用点源调用的方式运行,不会启动独立子进程,脚本内创建的映射会保留在全局上下文:
# 示例:调用当前目录下的映射脚本 . .\map-azure-fileshare.ps1
方案2:映射时添加持久化参数,将映射写入系统配置
如果使用net use命令执行映射,添加/persistent:yes参数:
net use Z: \\<存储账户名>.file.core.windows.net\<共享名> <存储账户密钥> /user:Azure\<存储账户名> /persistent:yes
如果使用PowerShell原生New-PSDrive cmdlet执行映射,添加-Persist参数:
New-PSDrive -Name Z -PSProvider FileSystem -Root "\\<存储账户名>.file.core.windows.net\<共享名>" -Credential $cred -Persist
添加持久化参数的映射会被写入系统注册表,不仅不会随脚本进程退出消失,重启系统后也可自动挂载(前提是网络可达、身份凭证有效)。
额外注意事项
- 不要使用管理员权限运行映射脚本/命令,管理员上下文创建的映射对普通用户权限的资源管理器不可见。
- 确保本地445端口出站没有被运营商、本地防火墙封禁,这是Azure File Share SMB协议访问的必要条件。
内容的提问来源于stack exchange,提问作者Santa
相关产品推荐
相关产品推荐

