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

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

如何使用。net 4运行时运行PowerShell ?


当前回答

如果您只需要在。net 4中执行单个命令、脚本块或脚本文件,请尝试使用。net 4中的激活配置文件,使用CLR版本4仅启动单个PowerShell实例。

详情:

http://blog.codeassassin.com/2011/03/23/executing-individual-powershell-commands-using-net-4/

PowerShell模块示例:

https://gist.github.com/882528

其他回答

请谨慎使用注册表项方法。这些是机器范围的键,强制将所有应用程序迁移到。net 4.0。

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

如果您需要使用PowerShell 4.0,这应该在每个应用程序的基础上使用配置文件完成,您应该与PowerShell团队核实准确的建议。这可能会破坏一些现有的PowerShell命令。

只需运行powershell.exe,并将COMPLUS_version环境变量设置为v4.0.30319。 例如,从cmd.exe或。bat-file:

set COMPLUS_version=v4.0.30319
powershell -file c:\scripts\test.ps1

作为另一种选择,最新的PoshConsole发行版包括针对. net 4 RC的二进制文件(它可以很好地对抗RTM发行版),无需任何配置。

我找到的最好的解决方案是在PowerShell中使用更新版本的。net的博文中。这允许powershell.exe与。net 4程序集一起运行。

只需修改(或创建)$pshome\powershell.exe。配置,使其包含以下内容:

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

另外,快速设置注意事项:

位置和文件多少依赖于平台;然而,将为您提供如何使解决方案为您工作的内联要点。

您可以通过在PowerShell窗口中执行cd $ phome来查找PowerShell在计算机上的位置(不能从DOS提示符中工作)。 路径将类似于(示例)C:\Windows\System32\WindowsPowerShell\v1.0\ 如果正在执行PowerShell.exe,则将配置放入的文件名为:PowerShell.exe .config(如果需要,则创建配置文件)。 如果PowerShellISE.Exe正在运行,那么您需要创建它的配套配置文件PowerShellISE.Exe.config

如果您只需要在。net 4中执行单个命令、脚本块或脚本文件,请尝试使用。net 4中的激活配置文件,使用CLR版本4仅启动单个PowerShell实例。

详情:

http://blog.codeassassin.com/2011/03/23/executing-individual-powershell-commands-using-net-4/

PowerShell模块示例:

https://gist.github.com/882528