2015-05-05 65 views
1

this page上,PowerShell團隊演示如何在您的.NET應用程序中託管PowerShell引擎並向其傳遞命令。承載多個PowerShell版本

有什麼方法可以控制創建PowerShell引擎的哪個版本?也許使用v2的一個腳本,而v4的另一個?

我本來以爲InitialSessionState.Create方法將使得它,但它不會出現這種情況。

回答

-1

我做了一個快速功能您在工作與PowerShell中執行腳本塊2.0

Function Execute-Job ([scriptblock]$ScriptBlock, [array]$ArgumentList, [switch]$PassThru, [switch]$PS2) { 


    If ($PS2) { $Job = Start-Job -ScriptBlock $ScriptBlock -ArgumentList $ArgumentList -PSVersion 2.0 } 
     Else { $Job = Start-Job -ScriptBlock $ScriptBlock -ArgumentList $ArgumentList } 

    If ($PassThru) { $Job | Receive-Job -Wait -AutoRemoveJob } 
       Else { $Job } 

} #End Function Execute-Job 

$ScriptBlock = { $PSVersionTable } 
Execute-Job $ScriptBlock -PassThru -Ps2 

這回:

Name       Value                                                 
----       -----                                                 
PSRemotingProtocolVersion  2.1                                                 
BuildVersion     6.1.7601.17514                                              
PSCompatibleVersions   {1.0, 2.0}                                               
PSVersion      2.0   <----------                                                 
CLRVersion      2.0.50727.5485                                              
WSManStackVersion    2.0                                                 
SerializationVersion   1.1.0.1  

告訴我你的想法! ;)

+0

發佈到TechNet:https://gallery.technet.microsoft.com/Function-Execute-Job-c2f76200 –

+0

這很好,但不是我們之後。我們需要一個.NET應用程序能夠將腳本發送到PS 2以及PS 3(或PS 4)引擎,所有這些都在同一個應用程序中。 – DougN

+0

我以爲我的代碼很可愛..:P好吧,所以你的PS腳本嵌入在你的.NET應用程序中,所以你不要直接調用powershell.exe來執行。對? –