我正在更新管理一些 .NET 程序集的 PowerShell 脚本。该脚本是为针对 .NET 2(与 PowerShell 运行的框架版本相同)构建的程序集编写的,但现在需要使用 .NET 4 程序集以及 .NET 2 程序集。
由于 .NET 4 支持运行针对旧版本框架构建的应用程序,因此当我需要针对 .NET 4 程序集运行 PowerShell 时,似乎最简单的解决方案是使用 .NET 4 运行时启动 PowerShell。
如何使用 .NET 4 运行时运行 PowerShell?
PowerShell(引擎)在 .NET 4.0 下运行良好。PowerShell(控制台主机和ISE)不这样做,仅仅是因为它们是针对旧版本的 .NET 编译的。有一个注册表设置将 更改加载的 .NET 框架 systemwide ,这反过来将允许 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,您可以将配置 ($psHome\powershell_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 4.0,甚至是使用 .net 2 和 .net 3.5 的应用程序