CLR обнаружил неверную программу с powershell

1

Я пытаюсь отправить сценарий Powershell на сервер и выполнить его. Сервер получает скрипт, но когда я пытаюсь создать экземпляр PS, он сработает. Я много оглядывался для симулятивных случаев, но, похоже, это было характерно в большинстве случаев.

public void processMsg(TcpClient client, NetworkStream stream, byte[] bytesReceived, int length)
        {    
            mstrMessage = Encoding.ASCII.GetString(bytesReceived, 0, bytesReceived.Length);
            mscClient = client;
            mstrMessage = mstrMessage.Substring(0, length);
            Console.WriteLine(mstrMessage);

            if (mstrMessage.Length > 8)
            {
                if (mstrMessage.Substring(0, 8) == "%SCRIPT%")
                {
                    Console.WriteLine("Script recieved.");
                    try
                    {
  • В строке ниже я получаю следующее исключение: Common Language Runtime обнаружил недопустимую программу.

                        PowerShell powerShellInstance = PowerShell.Create();
                        using (powerShellInstance)
                        {
                            powerShellInstance.AddScript(mstrMessage);
                            powerShellInstance.Invoke();
                            Console.WriteLine("Script executed.");
                        }
    
                    }
                    catch (InvalidProgramException)
                    {
    
                        throw;
                    }
    
                }
            }
    
  • 0
    Я ничего не знаю о вызове Powershell таким образом, но: это как-то связано с требованием другой версии .NET Framework? Например, вы работаете как 2.0, но Powershell пытается использовать что-то из 4.0?
  • 0
    @DarkFalcon Я использую Powershell 3.0 с фреймворком 4.5.1. Проверяя эту ссылку: technet.microsoft.com/en-us/library/hh847769.aspx, похоже, я все делаю правильно.
Показать ещё 4 комментария
Теги:
powershell
clr

1 ответ

0
Лучший ответ

Важными битами являются: A) какая версия System.Management.Automation.dll вы скомпилировали, B), какую версию.NET вы завершили, и C) какие версии PowerShell и.NET установлены на сервере.

Вероятно, ваш сервер работает с устаревшей версией PowerShell, поэтому то, что вы скомпилировали, отличается от того, что доступно на сервере.

  • 0
    Извините, что поднял старый ответ на вопрос, но как вы используете System.Management.Automation, если вы должны поддерживать PowerShell v2 +? Я хочу скомпилировать против .NET 4.0 (гарантировано на сервере) и включить System.Management.Automation с ЛЮБОЙ версией PowerShell 2 или выше. Какие у меня варианты?
  • 0
    @ferventcoder Если вам нужна поддержка v2, вам придется скомпилировать версию 1.0 SMA.dll. Вы должны быть в состоянии запустить двигатель PS в 4.0. Если вам когда-нибудь понадобится поддержка версии v3 +, ознакомьтесь с этой записью в блоге - blogs.msdn.com/b/powershell/archive/2015/12/12/…
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню