mRemoteNG 是一个多远程协议连接客户端,与 RDCMan 相媲美,但支持其他协议,如 SSH、VNC 等。
我正在制作mRemoteNG 创建批量连接脚本的自定义版本。该脚本是为 PS 5.1 编写的,我正在尝试将它与脚本中的许多其他组件一起更新到 7。该脚本通过 PS 批量创建连接,因此不需要通过 UI 完成(如果您有很多要添加的内容,那就太麻烦了)。
为了创建每个连接对象,通过 mRemoteNG.exe 构建一个强类型的 .NET 对象,该对象随后被序列化并导出为 XML。我正在尝试执行第一步:在当前会话中加载 mRemoteNG.exe 以进一步创建强类型的 .NET 对象。
在 5.1 中,我可以使用 [System.Reflection.Assembly]::LoadFile() 毫无问题地加载 mRemoteNG.exe。7、同样的方法行不通。我知道上述方法最终将被弃用,因此切换到 Add-Type 希望解决问题,但得到了相同的结果。
要准确测试以下内容,您需要在此处下载 mRemoteNG 。我在我的机器上使用 v1.77,建议您也这样做以最准确地重现此问题。但是,我已经针对 1.76 对此进行了测试,并且可以确认发生了同样的问题。
我正在运行的内容:
- PowerShell 5.1 - 成功
- [System.Reflection.Assembly]::LoadFile("C:\Program Files (x86)\mRemoteNG\mRemoteNG.exe")
- PowerShell 7.0.3 - 失败
- Add-Type -Path ("C:\Program Files (x86)\mRemoteNG\mRemoteNG.dll")
- 请注意,您仍然可以在 7 中使用 PS 5.1 版本,无论哪种方式都会失败
- 我复制了一份 mRemoteNG 并将其重命名为 mRemoteNG.dll,因为 Add-Type 不支持 .exe
尝试使用上述任一方法加载时收到的错误:
使用“1”参数调用“LoadFile”的异常:“无法加载文件或程序集'mRemoteNG,版本 = 1.77.0.41252,文化 = 中性,PublicKeyToken = null'。”
PublicKeyToken=null 最初让我相信存在签名问题,但谷歌搜索似乎表明这是一个依赖冲突。但是,在这种情况下,异常中不会像通常那样指示依赖性问题。
值得注意的是,mRemoteNG 需要 .NET 4.6。在 PS 5.1 和 7 中运行 [System.Reflection.Assembly]::GetExecutingAssembly().ImageRuntimeVersion 表明我的系统上的默认值为 4.0.30319。我很难理解在 5.1 和 7 中使用相同 .NET 版本运行的 PS 如何产生两个完全不同的结果。
有没有人知道为什么会发生这种情况以及如何解决?