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

为何升级至PowerShell 6(pwsh.exe)后无法加载System.Windows.Forms?

为什么PowerShell 6调用System.Windows.Forms会失败?

根本原因

你遇到的问题本质是PowerShell 5.1和6+版本的底层运行框架差异:

  • powershell.exe(5.1)是基于Windows专属的.NET Framework开发的,而System.Windows.Forms本来就是.NET Framework里的原生桌面UI组件,所以能直接加载运行。
  • 但pwsh.exe(6.2.3)是基于早期的.NET Core构建的——这一阶段的.NET Core主打跨平台服务器/控制台场景,完全砍掉了Windows桌面UI相关的库(包括System.Windows.Forms),所以你尝试加载这个程序集时才会抛出FileLoadException。

至于你看到的升级提示,是微软在推动用户迁移到跨平台的PowerShell版本,但早期的6.x版本确实牺牲了不少.NET Framework的专属功能,这就是你的弹窗功能失效的直接原因。

解决办法

根据你的需求,有几个实用的方案:

1. 升级到PowerShell 7.0及以上版本

从PowerShell 7.0开始,微软基于.NET Core 3.0(后续是.NET 5/6/7/8)重新构建,而.NET Core 3.0恢复了对Windows桌面组件的支持(仅限Windows平台)。操作步骤:

  • 安装最新的PowerShell 7(直接下载官方安装包即可)
  • 打开PowerShell 7,先安装Windows Forms的支持模块:
    Install-Module -Name WindowsForms -Scope CurrentUser
    
  • 之后就能正常使用弹窗功能了,推荐用更现代的写法:
    Add-Type -AssemblyName System.Windows.Forms
    [System.Windows.Forms.MessageBox]::Show("This is the Message text")
    

2. 继续用PowerShell 5.1处理UI场景

PowerShell 5.1是Windows的内置组件,不会被PowerShell 7替代,如果你只是需要Windows桌面弹窗功能,完全可以直接用powershell.exe来运行相关脚本——直接创建快捷方式指向它就行,不用纠结升级提示。

3. 跨版本调用(临时救急)

如果不想升级也不想换版本,还能在pwsh里间接调用5.1的功能:

powershell.exe -Command "[System.Windows.Forms.MessageBox]::Show('This is the Message text')"

这样就能在PowerShell 6环境里触发弹窗了。

内容的提问来源于stack exchange,提问作者bradgonesurfing

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:58:38