2015-07-03 81 views
1

我想在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
+0

請原諒我的好奇心,但爲什麼你需要這個?你只是試圖編寫可移植的腳本,還是你有特定的兼容性問題? –

+0

@RyanBemrose = compability問題。安裝了PowerShell 3.0的用戶會收到此錯誤「Microsoft .NET不支持Microsoft .NET運行時版本4.0.30319.17929」。 – Diskdrive

+0

這不僅僅是PowerShell版本。這是您需要加載的底層.NET運行時。開始一個新的過程是改變它的唯一方法。 –

回答

3

如果你唯一的目標就是避免創建單獨的包裝腳本,你可以隨時使用該腳本重新啓動本身。以下腳本將始終使用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" 
+0

好的,那還不錯。這是一種常見的模式嗎?有沒有辦法讓它成爲通用的,以便不檢查版本,而是檢查腳本是否第一次運行?然後,我實際上可以將其他內容放在那裏,例如調用Set-Credential以讓用戶在特定帳戶中運行腳本 – Diskdrive

+0

已修改爲顯示兩種情況 - 有條件的重新啓動和始終重新啓動。 –

+0

謝謝瑞安。這正是我正在實施的邏輯線路,但感謝您爲我完成! – Diskdrive