PowerShell函数内挂载的共享驱动器无法被后续代码访问问题求助
问题原因确认
你的猜测完全正确,问题确实是PSDrive的作用域限制导致的。
默认情况下,New-PSDrive 创建的驱动器仅对当前作用域可见:当挂载命令写在函数内部时,默认作用域为函数本地,函数执行完成后挂载的M盘会被自动回收,因此后续的Make_Dir函数、Windows资源管理器都无法识别该挂载盘。
解决方案
方案1:指定全局作用域(推荐,不改动现有函数结构)
在Mount_Drive函数的New-PSDrive命令中添加-Scope Global参数,让挂载的驱动器在整个PowerShell会话生命周期内生效,所有函数都可以正常访问:
function Mount_Drive { Clear-Host Write-Host "Mounting drive..." -NoNewLine -ForegroundColor Yellow # 添加-Scope Global参数 New-PSDrive -Name "M" -Root "\\192.168.1.10\f" -PSProvider "FileSystem" -Credential $S_Creds -Scope Global Write-Host "Done" -ForegroundColor Green }
如果你需要让该挂载盘在Windows资源管理器中也可见,再额外添加-Persistent参数即可,二者配合使用就能实现和GUI手动挂载一致的效果。
方案2:取消函数封装
和你姊妹系统上的可用脚本保持一致,直接在脚本的全局作用域执行New-PSDrive挂载命令,不封装到函数中,也可以规避作用域限制问题。
注意事项
- 若使用
-Persistent参数,该网络挂载会被系统保留,用户下次登录时会自动重新挂载,不需要持久化可以省略该参数。 - 如果挂载时使用的凭据和当前登录Windows的凭据不同,资源管理器中默认不会显示该挂载盘,属于Windows的安全机制限制。
内容的提问来源于stack exchange,提问作者Ken
相关产品推荐
相关产品推荐

