mRemoteNG — это клиент подключения с несколькими удаленными протоколами, сравнимый с RDCMan, но с поддержкой других протоколов, таких как SSH, VNC и т. д.
Я делаю пользовательскую версию mRemoteNG Create Bulk Connections сценарий. Скрипт написан для PS 5.1, пытаюсь обновить его до 7 вместе с рядом других компонентов внутри скрипта. Сценарий создает пакеты соединений через PS, поэтому это не нужно делать через пользовательский интерфейс (гигантская головная боль, если у вас есть что добавить).
Для создания каждого объекта соединения с помощью mRemoteNG.exe создается строго типизированный объект .NET, который затем сериализуется и экспортируется в XML. Я пытаюсь выполнить первый шаг: загрузить mRemoteNG.exe в текущем сеансе, чтобы создать строго типизированные объекты .NET дальше по конвейеру.
В версии 5.1 я могу без проблем загрузить mRemoteNG.exe, используя [System.Reflection.Assembly]::LoadFile(). В 7 этот же метод не работает. Я понимаю, что вышеуказанный метод в конечном итоге устарел, и поэтому переключился на Add-Type в надежде решить проблему, но получил тот же результат.
Чтобы точно проверить приведенное ниже, вам необходимо загрузить mRemoteNG здесь. Я использую v1.77 на своей машине и предлагаю вам сделать то же самое, чтобы добиться наиболее точного воспроизведения этой проблемы. Однако я проверил это на 1.76 и могу подтвердить, что возникает та же проблема.
Что я запускаю:
- PowerShell 5.1 - SUCCESS
- [System.Reflection.Assembly]::LoadFile("C:\Program Files (x86)\mRemoteNG\mRemoteNG.exe")
- PowerShell 7.0.3 - FAIL
- Add-Type -Path ("C:\Program Files (x86)\mRemoteNG\mRemoteNG.dll")
- Обратите внимание, что вы все еще можете использовать версию PS 5.1 в 7, в любом случае это не удастся.
- Я сделал копию mRemoteNG и переименовал ее в mRemoteNG.dll, потому что Add-Type не поддерживает .exe
Ошибка, которую я получаю при попытке загрузить любой из вышеперечисленных методов:
Исключение при вызове LoadFile с 1 аргументом (аргументами): не удалось загрузить файл или сборку «mRemoteNG, версия = 1.77.0.41252, культура = нейтральная, PublicKeyToken = null».
PublicKeyToken=null изначально заставил меня поверить, что возникла проблема с подписью, но поиск в Google, похоже, указывает на то, что это конфликт зависимостей. Однако в этом случае в исключении не указывается проблема с зависимостями, как это обычно бывает.
Стоит отметить, что для mRemoteNG требуется .NET 4.6. Запуск [System.Reflection.Assembly]::GetExecutingAssembly().ImageRuntimeVersion в PS 5.1 и 7 указывает, что по умолчанию в моей системе используется 4.0.30319. Я изо всех сил пытаюсь понять, как PS, работающий с одной и той же версией .NET в 5.1 и 7, дает два совершенно разных результата.
Кто-нибудь знает, почему это происходит и как это можно решить?