2014-02-24 106 views
0

我正在尋找一種方法,如何使用系統上找到的最新的PowerShell引擎在內存中運行C#中的PowerShell腳本。 目前,我使用Microsoft Windows PowerShell引擎核心程序集(System.Management.Automation),它適用於使用PowerShell 2.0版引擎的PowerShell腳本。在內存中運行PowerShell腳本

我的目標是創建一個.NET 2.0或3.5程序集,它使用系統上最新的powershell引擎調用內存中的powershell腳本。這可能是版本2或3

這些都是我的先決條件:

  • 我的組裝是要針對.NET 2.0或.NET 3.5
  • 始終使用PowerShell引擎的最新版本
  • 在內存中運行腳本(這是一個禁止將PS腳本臨時存儲在硬盤上)

任何想法?

+0

爲什麼你需要使用最新的PowerShell?你只需要能夠在最新的PowerShell上運行,或者你想要在最新版本中定位新功能? –

+0

當機器上安裝了powershell v3時,腳本使用powershell 3功能。 – DieterS

+1

由於使用較新3.0特性的C#代碼需要針對v3版本的System.Management.Automation.dll進行編譯,因此這將更爲棘手。我將在一個引用SMA v3的類庫中編譯V1/2的東西,引用SMA v1/2和V3/V4的東西。然後在運行時確定系統上使用Assembly.LoadFrom加載相應的類庫。您也將遇到運行正確.NET運行時的問題。這可能需要一個小EXE存根執行此確定,然後從兩個exes(一個用於.NET 2.0,另一個用於4.0) –

回答

1

創建一個RAM disk並將腳本文件存儲在那裏。或者,如果您不想存儲任何腳本文件,請使用AddCommand() method將單個命令添加到PowerShell對象。

1

您可以在C#程序中將腳本嵌入爲「嵌入式資源」,然後在運行時將其提取出來。看看這個script行149-155關於如何做到這一點。針對.NET 2.0到3.5是很容易的,因爲2.0,3.0和3.5都運行在.NET 2.0運行時 - 只是針對.NET 2.0。

但是,如果您希望始終鎖定最新版本的PowerShell引擎,因爲PowerShell V3和V4將以.NET 4.0爲目標,所以這會變得更加棘手。如果您的程序集總是以.NET 2.0(甚至3.5)爲目標,那麼您將無法在最新的PowerShell引擎中使用新功能,因爲在編譯期間必須引用V3 System.Management.Automation.dll程序集並且它需要。 NET 4.0。