¿Cómo puedo ejecutar PowerShell con el tiempo de ejecución de .NET 4?
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?
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.config
para 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\
- La ruta será algo así como (ejemplo)
- El nombre del archivo para colocar la configuración es:
powershell.exe.config
si sePowerShell.exe
está ejecutando (crea el archivo de configuración si es necesario).- Si
PowerShellISE.Exe
se está ejecutando, entonces necesita crear su archivo de configuración complementario comoPowerShellISE.Exe.config
- Si
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.
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.