У меня есть сервер, который мы используем для пакетной обработки.
Я могу войти на сервер с помощью svc_account и запустить powershell -f file.ps1
и он отлично работает в версии 2 или 3 следующим образом:
powershell -Version 2 -f file.ps1
powershell -f file.ps1
Если я попытаюсь запустить его через наш пакетный процессор, я получаю следующее сообщение
Version v4.0.30319 of the .NET Framework is not installed and it is required to run version 3 of Windows PowerShell.
Эта ошибка возникает независимо от того, запускал ли я свой пакетный процессор как v3 или v2 PowerShell.
Дело в том, что .NET установлен. 3.5, 4.0 и 4.5 все существуют на этом сервере, так что это что-то с логином учетной записи, которое по какой-то причине не распознает, что .NET установлен.
Добавьте этот ключ и попробуйте запустить его снова:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework]
"InstallRoot"="C:\\Windows\\Microsoft.NET\\Framework64\\"
Мы запускали powershell на платформе .NET версии 4 (ala:
https://stackoverflow.com/q/2094694
) для этого использовался файл конфигурации активации
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
</startup>
и
set COMPLUS_ApplicationMigrationRuntimeActivationConfigPath = %~dp0
Важным моментом в нашем случае было то, что мы запрашивали версию 4.6.1 фреймворка, а у нас была установлена только 4.5.
Сообщение об ошибке явно неадекватно, потому что проблема не в версии платформы. Но поскольку этот вопрос - первое, что вы получаете при поиске этого сообщения об ошибке, мы надеемся, что этот ответ окажется полезным для кого-то еще.