¿Cómo puedo ejecutar PowerShell con el tiempo de ejecución de .NET 4?

Resuelto Emperor XLII asked hace 14 años • 11 respuestas

Estoy actualizando un script de PowerShell que administra algunos ensamblados .NET. El script se escribió para ensamblados creados en .NET 2 (la misma versión del marco con el que se ejecuta PowerShell), pero ahora necesita funcionar con ensamblados .NET 4 y .NET 2.

Dado que .NET 4 admite la ejecución de aplicaciones creadas en versiones anteriores del marco, parece que la solución más sencilla es iniciar PowerShell con el tiempo de ejecución de .NET 4 cuando necesito ejecutarlo en ensamblados .NET 4.

¿Cómo puedo ejecutar PowerShell con el tiempo de ejecución de .NET 4?

Emperor XLII avatar Jan 19 '10 22:01 Emperor XLII
Aceptado

La mejor solución que he encontrado está en la publicación del blog Uso de versiones más recientes de .NET con PowerShell . Esto permite que powershell.exe se ejecute con ensamblados .NET 4.

Simplemente modifique (o cree) $pshome\powershell.exe.configpara que contenga lo siguiente:

<?xml version="1.0"?> 
<configuration> 
    <startup useLegacyV2RuntimeActivationPolicy="true"> 
        <supportedRuntime version="v4.0.30319"/> 
        <supportedRuntime version="v2.0.50727"/> 
    </startup> 
</configuration> 

Notas adicionales y de configuración rápida:

Las ubicaciones y los archivos dependen en cierta medida de la plataforma; sin embargo, le dará una idea general de cómo hacer que la solución funcione para usted.

  • Puede encontrar la ubicación de PowerShell en su computadora ejecutándolo cd $pshome en la ventana de Powershell (no funciona desde el indicador de DOS).
    • La ruta será algo así como (ejemplo)C:\Windows\System32\WindowsPowerShell\v1.0\
  • El nombre del archivo para colocar la configuración es: powershell.exe.configsi se PowerShell.exeestá ejecutando (crea el archivo de configuración si es necesario).
    • Si PowerShellISE.Exese está ejecutando, entonces necesita crear su archivo de configuración complementario comoPowerShellISE.Exe.config
cmo999 avatar Feb 21 '2011 17:02 cmo999

PowerShell (el motor) funciona bien en .NET 4.0. PowerShell (el host de la consola y el ISE ) no lo hacen, simplemente porque fueron compilados con versiones anteriores de .NET. Hay una configuración de registro que cambiará el marco .NET cargado en todo el sistema , lo que a su vez permitirá que PowerShell use clases .NET 4.0:

reg add hklm\software\microsoft\.netframework /v OnlyUseLatestCLR /t REG_DWORD /d 1
reg add hklm\software\wow6432node\microsoft\.netframework /v OnlyUseLatestCLR /t REG_DWORD /d 1

Para actualizar solo el ISE para usar .NET 4.0, puede cambiar el archivo de configuración ($psHome\powershell_ise.exe.config) para que tenga un fragmento como este:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <startup>
      <supportedRuntime version="v4.0.30319" />
    </startup>
</configuration>

Puede crear aplicaciones .NET 4.0 que llamen a PowerShell usando la API de PowerShell (System.Management.Automation.PowerShell) sin problemas, pero estos pasos ayudarán a que los hosts PowerShell incluidos funcionen en .NET 4.0.


Elimine las claves de registro cuando ya no las necesite. Estas son claves para toda la máquina y migran por la fuerza TODAS las aplicaciones a .NET 4.0, incluso las aplicaciones que usan .net 2 y .net 3.5.


Start-Automating avatar Jan 19 '2010 20:01 Start-Automating

Tenga MUCHO cuidado al utilizar el método de clave de registro. Estas son claves para toda la máquina y migran por la fuerza TODAS las aplicaciones a .NET 4.0.

Muchos productos no funcionan si se migran por la fuerza y ​​esto es una ayuda para las pruebas y no un mecanismo de calidad de la producción. Visual Studio 2008 y 2010, MSBuild , turbotax y una gran cantidad de sitios web, SharePoint , etc. no deben migrarse automáticamente.

Si necesita usar PowerShell con 4.0, esto debe hacerse por aplicación con un archivo de configuración; debe consultar con el equipo de PowerShell la recomendación precisa. Es probable que esto rompa algunos comandos de PowerShell existentes.

Madhu Talluri avatar Jun 10 '2010 21:06 Madhu Talluri