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

PowerShell中无法加载WinSCP程序集:依赖项缺失问题求助

WinSCPnet.dll加载失败(HRESULT: 0x80131515)问题排查与解决

错误信息

Add-Type : Could not load file or assembly 
'file://\\~removed~\dfs\Repo\Scripts\ScheduledTasks\~removed~\WinSCP-Automation\WinSCPnet.dll' or one of its dependencies. 
Operation is not supported. (Exception from HRESULT: 0x80131515)
At \\~removed~\dfs\Repo\Scripts\ScheduledTasks\~removed~\Start-Upload.ps1:19 char:1
+ Add-Type -Path (Join-Path $env:WINSCP_PATH "WinSCPnet.dll")
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Add-Type], FileLoadException
    + FullyQualifiedErrorId : System.IO.FileLoadException,Microsoft.PowerShell.Commands.AddTypeCommand

问题代码片段

#Dependencies 
$Path = '\\redacted\dfs\Repo\Scripts\ScheduledTasks\redacted'
Set-Location -Path $Path
$env:WINSCP_PATH = '.\WinSCP-Automation'
Add-Type -Path (Join-Path $env:WINSCP_PATH "WinSCPnet.dll")

问题背景

脚本用于通过任务计划程序执行WinSCP上传,在Windows Server 2012 R2运行正常,迁移到Windows Server 2019后出现上述错误。已尝试以下操作但未解决:

  • 使用UNC路径下的最新WinSCP程序集
  • 从本地目录加载DLL
  • 安装Windows Server 2012 R2同款VS C++ Redistributable
  • 确认.NET Framework版本匹配
  • 解除所有DLL及WinSCP文件的阻止状态
  • 使用现代依赖检测工具确认依赖齐全
  • 尝试不同版本的WinSCPnet.dll及GC操作
  • 两台服务器均使用PowerShell 5.1,且已安装WinSCP PowerShell模块

针对性解决方案

1. 替换Add-Type为UnsafeLoadFrom绕过CAS限制

Windows Server 2019默认禁用了.NET Framework的代码访问安全(CAS)策略,Add-Type对远程资源(UNC路径)的加载限制更严格。可改用UnsafeLoadFrom方法加载程序集:

$dllPath = Join-Path $env:WINSCP_PATH "WinSCPnet.dll"
[System.Reflection.Assembly]::UnsafeLoadFrom($dllPath)

此方法跳过部分安全检查,仅适合信任的内部资源场景。

2. 检查任务计划程序的执行配置

  • 确保任务计划的执行账户拥有对UNC路径的完全控制权限,且勾选「以最高权限运行」选项。
  • 避免使用「不存储密码,用户必须登录才能运行」的配置,该模式下网络资源访问可能受限制。

3. 启用.NET Framework 3.5(若WinSCPnet.dll依赖)

部分旧版WinSCPnet.dll编译目标为.NET Framework 3.5,而Windows Server 2019默认未启用该组件:

  1. 打开服务器管理器 → 添加角色和功能
  2. 找到「.NET Framework 3.5 功能」,勾选包括「HTTP Activation」在内的子组件
  3. 完成安装后重启服务器测试

4. 禁用IE增强安全配置(IE ESC)

Windows Server 2019默认启用的IE ESC会影响系统对远程资源的信任度:

  1. 打开服务器管理器 → 本地服务器 → IE增强安全配置
  2. 管理员和用户均设置为「关闭」,测试是否解决加载问题

5. 复制WinSCP组件到本地系统目录

将WinSCPnet.dll、WinSCP.exe及相关依赖文件复制到本地目录(如C:\Program Files\WinSCP),修改脚本使用本地路径加载:

$env:WINSCP_PATH = "C:\Program Files\WinSCP"
Add-Type -Path (Join-Path $env:WINSCP_PATH "WinSCPnet.dll")

此方法彻底规避UNC路径的安全限制问题。

内容的提问来源于stack exchange,提问作者Evan Thomas-Broughton

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 21:53:10