O PowerShell (o mecanismo) funciona bem no .NET 4.0. O PowerShell (o host do console e o ISE ) não, simplesmente porque eles foram compilados em versões mais antigas do .NET. Há uma configuração de registro que alterará a estrutura do .NET carregada em todo o sistema , o que permitirá que o PowerShell use as classes do .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 atualizar apenas o ISE para usar o .NET 4.0, você pode alterar o arquivo de configuração ($ psHome \ powershell_ise.exe.config) para ter um pedaço como este:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<startup>
<supportedRuntime version="v4.0.30319" />
</startup>
</configuration>
Você pode criar aplicativos .NET 4.0 que chamam o PowerShell usando a API do PowerShell (System.Management.Automation.PowerShell), mas essas etapas ajudarão a fazer com que os hosts integrados do PowerShell funcionem no .NET 4.0.
Remova as chaves do registro quando não precisar mais delas. Essas são chaves de toda a máquina e migram forçosamente TODOS os aplicativos para o .NET 4.0, mesmo aplicativos usando .net 2 e .net 3.5