如何更改从脚本内运行的powershell版本?
问题描述:
我想在v2模式下运行我的powershell脚本。没有包装脚本,可以做到这一点吗?如何更改从脚本内运行的powershell版本?
因此,例如,我现在可以做到这一点,如果我可以两个文件。
MainContent.ps1
write-output 'run some code'
Read-Host -Prompt "Scripts Completed : Press any key to exit"
Wrapper.ps1
powershell -version 2 -file 'MainContent.ps1'
这将工作,但我希望我并不需要有第二个封装文件,因为我创造了一大堆这些PS1脚本,并具有封装文件将增加一倍脚本的量我我需要。
我希望我能做这样的事情。
MainContent.ps1
Set-Powershell -version 2
write-output 'run some code'
Read-Host -Prompt "Scripts Completed : Press any key to exit"
后来,我还希望每个脚本都要求提供一组凭据,而且不使用包装文件。
这是目前可能?
要清楚,我使用PowerShell
版本2
答
如果你唯一的目标就是避免创建单独的包装脚本,你可以随时使用该脚本重新启动本身。以下脚本将始终使用PS版本2.0重新启动一次。
param([switch]$_restart)
if (-not $_restart) {
powershell -Version 2 -File $MyInvocation.MyCommand.Definition -_restart
exit
}
'run some code'
Read-Host -Prompt "Scripts Completed : Press any key to exit"
或者你可以使它有条件。仅当版本大于2.0时,此脚本才会与版本2重新启动。
if ($PSVersionTable.PSVersion -gt [Version]"2.0") {
powershell -Version 2 -File $MyInvocation.MyCommand.Definition
exit
}
'run some code'
Read-Host -Prompt "Scripts Completed : Press any key to exit"
请原谅我的好奇心,但为什么你需要这个?你只是试图编写可移植的脚本,还是你有特定的兼容性问题? –
@RyanBemrose = compability问题。安装了PowerShell 3.0的用户会收到此错误“Microsoft .NET不支持Microsoft .NET运行时版本4.0.30319.17929”。 – Diskdrive
这不仅仅是PowerShell版本。这是您需要加载的底层.NET运行时。开始一个新的过程是改变它的唯一方法。 –