1. ホーム
  2. .net

[解決済み】.NET 4ランタイムでPowerShellを実行するにはどうしたらいいですか?

2022-04-04 14:52:56

質問

いくつかの.NETアセンブリを管理するPowerShellスクリプトを更新しています。このスクリプトは、.NET 2(PowerShellが動作するフレームワークの同じバージョン)に対して構築されたアセンブリ用に書かれていましたが、現在は.NET 2アセンブリだけでなく、.NET 4アセンブリでも動作させる必要があります。

.NET 4は旧バージョンのフレームワークに対して構築されたアプリケーションの実行をサポートしているので、.NET 4アセンブリに対してPowerShellを実行する必要がある場合、.NET 4ランタイムで起動することが最もシンプルな解決策のように思われます。

.NET 4 ランタイムで PowerShell を実行するにはどうすればよいですか?

どのように解決するのですか?

PowerShell(エンジン)は、.NET 4.0で正常に動作します。PowerShell (コンソールホストと ISE これは、古いバージョンの.NETに対してコンパイルされているためです。 レジストリの設定により システム全体にロードされる.NETフレームワークを変更する これにより、PowerShell は .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

ISEだけを.NET 4.0を使うようにアップデートするには、設定($psHomepowershell_ise.exe.config)ファイルを次のようなチャンクに変更すればよいでしょう。

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

PowerShell API (System.Management.Automation.PowerShell) を使用して PowerShell を呼び出す .NET 4.0 アプリケーションは問題なく構築できますが、以下の手順により、既製の PowerShell ホストを .NET 4.0 で動作させることができます。


レジストリキーは不要になったら削除してください。これらはマシン全体のキーであり、.net 2や.net 3.5を使用しているアプリケーションも含め、すべてのアプリケーションを.NET 4.0に強制的に移行させます。