powershell - 在 Windows 8 上使用 PowerShell 2 作为默认版本

标签 powershell powershell-3.0

我想使用 PowerShell 2 作为 Windows 8 上的默认 PowerShell 版本而不指定 -Version转变。

我开始使用 PowerShell 3 附带的 Windows 8 RTM,但我的脚本与 PowerShell 3 不兼容。

最佳答案

Powershell 使用 publisher policy (另请参阅 here)自动将针对 Powershell 2 构建的主机重定向到 Powershell 3 运行时(如果可用)。

大多数情况下,这正是您想要的,但是如果您的应用需要,您可以明确禁用发布者政策。

将其放在 app.config 文件中以禁用 System.Management.Automation(powershell 运行时)的发布者策略:

<configuration>
  <runtime>
     <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
       <dependentAssembly>
         <assemblyIdentity name="System.Management.Automation" publicKeyToken="31bf3856ad364e35" />
         <publisherPolicy apply="no" />
      </dependentAssembly>
     </assemblyBinding>
  </runtime>
</configuration>

测试一下(针对 .NET 4.0 的控制台应用程序,明确引用 PS v2 运行时):
PowerShell ps = PowerShell.Create();
ps.AddScript("$psversiontable");
var result = ps.Invoke()[0].BaseObject as Hashtable;

Console.WriteLine("Powershell version: {0}", result["PSVersion"]);
Console.WriteLine(".NET version: {0}", typeof(string).Assembly.GetName().Version);

在我的 Win8 机器上运行这个(PSv3 肯定在那里),我得到了结果
Powershell version: 2.0
.NET version: 4.0.0.0

如果我注释掉 app.config,PS 版本将变为 3.0。

关于powershell - 在 Windows 8 上使用 PowerShell 2 作为默认版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12060460/

相关文章:

Powershell Get-Service 详解 "DESCRIPTION"Windows Service

.net - 为什么在PowerShell中无法包装对[Environment]::SetEnvironmentVariable的调用?

powershell - 测试命令匹配结果为 false 或 true

powershell - 如何使用Powershell将存储过程输出参数转换为变量?

powershell - 无法使用 powershell 生成的随 secret 码打开 7z 文件

iis - 如何从 PowerShell 指定应用程序池身份用户和密码

powershell - Get-Content -Wait 在读取文件时锁定文件,防止 Add-Content 写入数据

function - 如何将参数传递给 PowerShell 中的函数

powershell - 如何在 Windows 10 中从 PowerShell 启动通用 Windows 应用程序 (UWP)?

powershell - 使用 PowerShell 连接到 JMX