我如何使用.NET 4运行时运行PowerShell?

我正在更新管理某些.NET程序集的PowerShell脚本。 该脚本是为针对.NET 2构建的程序集(PowerShell运行的框架的相同版本)编写的,但现在需要使用.NET 4程序集以及.NET 2程序集。

由于.NET 4支持针对较旧版本框架构建的运行应用程序,因此似乎最简单的解决方案是在需要运行.NET 4程序集时运行带有.NET 4运行时的PowerShell。

我如何使用.NET 4运行时运行PowerShell?


PowerShell(引擎)在.NET 4.0下运行良好。 PowerShell(控制台主机和ISE)并不仅仅是因为它们是针对旧版.NET编译的。 有一个注册表设置可以改变系统加载的.NET框架 ,从而允许PowerShell使用.NET 4.0类:

reg add hklmsoftwaremicrosoft.netframework /v OnlyUseLatestCLR /t REG_DWORD /d 1
reg add hklmsoftwarewow6432nodemicrosoft.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的应用程序



我发现的最佳解决方案是在PowerShell中使用.NET的较新版本进行博客文章。 这允许powershell.exe与.NET 4程序集一起运行。

只需修改(或创建) $pshomepowershell.exe.config ,使其包含以下内容:

<?xml version="1.0"?> 
<configuration> 
    <startup useLegacyV2RuntimeActivationPolicy="true"> 
        <supportedRuntime version="v4.0.30319"/> 
        <supportedRuntime version="v2.0.50727"/> 
    </startup> 
</configuration> 

另外,快速安装说明:

位置和文件在某种程度上取决于平台; 但是会给你一个关于如何使解决方案为你工作的内联要点。

  • 您可以通过在PowerShell窗口中执行cd $pshome来找到PowerShell在您的计算机上的位置(不能从DOS提示符下运行)。
  • 路径将类似于(示例) C:WindowsSystem32WindowsPowerShellv1.0
  • 如果您的PowerShell.exe正在执行(如果需要,创建配置文件),将配置放入的文件名为: powershell.exe.config
  • 如果PowerShellISE.Exe正在运行,则需要将其配套文件创建为PowerShellISE.Exe.config

  • 请使用注册表键方法非常小心。 这些是机器范围内的密钥,并将所有应用程序强制迁移到.NET 4.0。

    如果被迫迁移,许多产品都不起作用,这是一种测试帮助,而不是一种生产质量机制。 Visual Studio 2008和2010,MSBuild,turbotax以及大量网站,SharePoint等不应该被自动化。

    如果您需要在4.0中使用PowerShell,那么应该在每个应用程序的基础上配置一个配置文件,您应该向PowerShell团队咨询确切的建议。 这很可能会破坏一些现有的PowerShell命令。

    链接地址: http://www.djcxy.com/p/4941.html

    上一篇: How can I run PowerShell with the .NET 4 runtime?

    下一篇: How to run a PowerShell script?