从网络共享的.ps1文件加载PowerShell类出现报错如何解决
前置排查
先确认导入命令的UNC路径格式正确,网络共享路径开头需要加两个反斜杠,修正后的基础命令格式如下:."\\server\scripts\powershellscripts\manager.ps1"
问题根因
包含PowerShell类的.ps1脚本在使用dot sourcing导入时,PowerShell会先将类定义编译为临时程序集再加载;而仅包含函数的脚本仅在运行时逐行解析,无需编译为独立程序集。默认Windows安全策略会标记网络共享路径的文件为非本地受信任来源,禁止加载该路径下生成的临时程序集,因此仅类定义脚本会触发报错。
解决方案
- 方案1:解除共享脚本的安全锁定
单个文件可以直接在文件资源管理器中找到对应.ps1文件,右键点击「属性」,在「常规」选项卡底部的「安全」区块勾选「解除锁定」,确认后重新执行导入命令即可。
批量处理多个共享路径脚本可以执行如下PowerShell命令:Get-ChildItem -Path "\\server\scripts\" -Recurse -Filter *.ps1 | Unblock-File - 方案2:配置.NET允许加载远程源程序集
在PowerShell配置文件中添加运行时配置项,放开远程来源程序集加载限制。首先打开PowerShell当前用户配置文件:notepad $PROFILE
在文件末尾添加如下内容后保存,重启PowerShell即可生效:$env:COMPLUS_LoadFromRemoteSources = 1 - 方案3:映射网络驱动器替代UNC路径
将目标网络共享路径映射为本地逻辑盘符,再通过本地盘符路径导入脚本:# 映射共享路径为Z盘 New-PSDrive -Name Z -PSProvider FileSystem -Root "\\server\scripts\powershellscripts\" -Persist # 导入类脚本 . "Z:\manager.ps1"
内容的提问来源于stack exchange,提问作者user10696838
相关产品推荐
相关产品推荐

