Je mets à jour un script PowerShell qui gère certains assemblys .NET. Le script a été écrit pour les assemblys construits sur .NET 2 (la même version du framework avec lequel PowerShell s'exécute), mais doit maintenant fonctionner avec les assemblys .NET 4 ainsi que les assemblys .NET 2.
Étant donné que .NET 4 prend en charge l'exécution d'applications construites sur des versions plus anciennes du cadre, il semble que la solution la plus simple consiste à lancer PowerShell avec le runtime .NET 4 lorsque j'ai besoin de l'exécuter sur des assemblys .NET 4.
Comment puis-je exécuter PowerShell avec le runtime .NET 4?
.net
powershell
.net-4.0
Empereur XLII
la source
la source
Réponses:
PowerShell (le moteur) fonctionne correctement sous .NET 4.0. PowerShell (l'hôte de la console et l' ISE ) ne le font pas, simplement parce qu'ils ont été compilés avec des versions plus anciennes de .NET. Il existe un paramètre de registre qui changera le framework .NET chargé à l'échelle du système , ce qui permettra à son tour à PowerShell d'utiliser les classes .NET 4.0:
Pour mettre à jour uniquement l'ISE pour utiliser .NET 4.0, vous pouvez modifier le fichier de configuration ($ psHome \ powershell_ise.exe.config) pour avoir un bloc comme celui-ci:
Vous pouvez créer des applications .NET 4.0 qui appellent PowerShell à l'aide de l'API PowerShell (System.Management.Automation.PowerShell), mais ces étapes aideront à faire fonctionner les hôtes PowerShell intégrés sous .NET 4.0.
Supprimez les clés de registre lorsque vous n'en avez plus besoin. Ce sont des clés à l'échelle de la machine et migrent de force TOUTES les applications vers .NET 4.0, même les applications utilisant .net 2 et .net 3.5
la source
La meilleure solution que j'ai trouvée se trouve dans le billet de blog Utilisation de nouvelles versions de .NET avec PowerShell . Cela permet à powershell.exe de s'exécuter avec des assemblys .NET 4.
Modifiez (ou créez) simplement
$pshome\powershell.exe.config
afin qu'il contienne les éléments suivants:Remarques supplémentaires sur la configuration rapide:
Les emplacements et les fichiers dépendent quelque peu de la plate-forme; cependant, vous donnera un aperçu en ligne de la façon de faire fonctionner la solution pour vous.
cd $pshome
dans la fenêtre Powershell (ne fonctionne pas à partir de l'invite DOS).C:\Windows\System32\WindowsPowerShell\v1.0\
powershell.exe.config
si votrePowerShell.exe
est en cours d'exécution (créez le fichier de configuration si nécessaire).PowerShellISE.Exe
est en cours d'exécution, vous devez créer son fichier de configuration compagnon en tant quePowerShellISE.Exe.config
la source
Veuillez être TRÈS prudent avec l'utilisation de l'approche par clé de registre. Ce sont des clés à l'échelle de la machine et migrent forcément TOUTES les applications vers .NET 4.0.
De nombreux produits ne fonctionnent pas en cas de migration forcée et il s'agit d'une aide au test et non d'un mécanisme de qualité de production. Visual Studio 2008 et 2010, MSBuild , turbotax et une multitude de sites Web, SharePoint et ainsi de suite ne doivent pas être automatisés.
Si vous devez utiliser PowerShell avec 4.0, cela doit être fait par application avec un fichier de configuration, vous devriez vérifier avec l'équipe PowerShell la recommandation précise. Cela risque de casser certaines commandes PowerShell existantes.
la source
Si vous n'avez besoin d'exécuter qu'une seule commande, bloc de script ou fichier de script dans .NET 4, essayez d'utiliser les fichiers de configuration d'activation à partir de .NET 4 pour démarrer une seule instance de PowerShell à l'aide de la version 4 du CLR.
Tous les détails:
http://blog.codeassassin.com/2011/03/23/executing-individual-powershell-commands-using-net-4/
Un exemple de module PowerShell:
https://gist.github.com/882528
la source
Si vous êtes toujours bloqué sur PowerShell v1.0 ou v2.0, voici ma variante de l'excellente réponse de Jason Stangroome.
Créez un
powershell4.cmd
endroit sur votre chemin avec le contenu suivant:Cela vous permettra de lancer une instance de la console PowerShell exécutée sous .NET 4.0.
Vous pouvez voir la différence sur mon système où j'ai PowerShell 2.0 en examinant la sortie des deux commandes suivantes exécutées à partir de cmd.
la source
Voici le contenu du fichier de configuration que j'ai utilisé pour prendre en charge les assemblys .NET 2.0 et .NET 4:
En outre, voici une version simplifiée du code compatible PowerShell 1.0 que j'ai utilisé pour exécuter nos scripts à partir des arguments de ligne de commande passés:
En plus de la gestion des erreurs de base illustrée ci-dessus, nous injectons également une
trap
instruction dans le script pour afficher des informations de diagnostic supplémentaires (similaires à la fonction Resolve-Error de Jeffrey Snover ).la source
Les autres réponses datent d'avant 2012 et se concentrent sur le «piratage» de PowerShell 1.0 ou PowerShell 2.0 pour cibler les nouvelles versions du .NET Framework et du Common Language Runtime (CLR).
Cependant, comme cela a été écrit dans de nombreux commentaires, depuis 2012 (lorsque PowerShell 3.0 est arrivé), une bien meilleure solution consiste à installer la dernière version de PowerShell . Il ciblera automatiquement CLR
v4.0.30319
. Cela signifie .NET 4.0, 4.5, 4.5.1, 4.5.2 ou 4.6 (attendu en 2015) car toutes ces versions sont des remplacements sur place les unes des autres. Utilisez$PSVersionTable
ou consultez le thread de version de PowerShell installé si vous n'êtes pas sûr de votre version de PowerShell.Au moment de la rédaction du présent document, la dernière version de PowerShell est 4.0, et elle peut être téléchargée avec Windows Management Framework (lien de recherche Google) .
la source
En fait, vous pouvez faire fonctionner PowerShell à l'aide de .NET 4 sans affecter les autres applications .NET. J'avais besoin de le faire pour utiliser la nouvelle propriété "Host" HttpWebRequest, mais changer le "OnlyUseLatestCLR" a cassé Fiddler car cela ne pouvait pas être utilisé sous .NET 4.
Les développeurs de PowerShell ont évidemment prévu cela, et ils ont ajouté une clé de registre pour spécifier la version du Framework à utiliser. Un léger problème est que vous devez vous approprier la clé de registre avant de la modifier, car même les administrateurs n'y ont pas accès.
Remplacez la valeur de cette clé par la version requise. Gardez à l'esprit que certains snapins ne peuvent plus se charger à moins qu'ils ne soient compatibles .NET 4 (WASP est le seul avec lequel j'ai eu des problèmes, mais je ne l'utilise pas vraiment de toute façon). VMWare , SQL Server 2008 , PSCX, Active Directory (Microsoft et Quest Software ) et SCOM fonctionnent tous correctement.
la source
Si vous ne souhaitez pas modifier le registre ou les fichiers app.config, une autre manière consiste à créer une application console .NET 4 simple qui imite ce que fait PowerShell.exe et héberge PowerShell ConsoleShell.
Voir Option 2 - Hébergement de Windows PowerShell vous-même
Tout d'abord, ajoutez une référence aux assemblys System.Management.Automation et Microsoft.PowerShell.ConsoleHost qui se trouvent sous % programfiles% \ Reference Assemblies \ Microsoft \ WindowsPowerShell \ v1.0
Utilisez ensuite le code suivant:
la source
Tout comme une autre option, la dernière version de PoshConsole comprend des fichiers binaires ciblés sur .NET 4 RC (qui fonctionnent bien par rapport à la version RTM) sans aucune configuration.
la source
Exécutez simplement powershell.exe avec
COMPLUS_version
la variable d'environnement définie surv4.0.30319
. Par exemple, à partir de cmd.exe ou d'un fichier .bat:la source