2014-02-10 95 views
0

我正在處理交流#項目,我試圖運行PowerShell腳本,將它們輸出到CSV並讀取CSV並將其輸出到Checked列表框。將批處理/ Powershell文件添加到編譯(生成)C#Powershell

我已經添加了一個PowerShell文件作爲資源與生成操作'編譯'和複製到輸出目錄'不要複製'。

文件的基本內容是:

Get-CimInstance -Query "SELECT * from Win32_Service where name LIKE 'sql%'" | select Name, State , StartMode | convertto-csv > proctest.csv 

我嘗試使用此字符串來訪問此文件

string ps_path = System.IO.Path.GetDirectoryName(System.Windows.Forms.Application.ExecutablePath) + "\\GetSvc.ps1"; 

我用的PS碼是

RunspaceConfiguration runspaceconfiguration = RunspaceConfiguration.Create(); 
Runspace runspace = RunspaceFactory.CreateRunspace(runspaceconfiguration); 
runspace.Open(); 
RunspaceInvoke scriptInvoker = new RunspaceInvoke(runspace); 
Pipeline pipeline = runspace.CreatePipeline(); 
Command mycommand = new Command(ps_path); 
pipeline.Commands.Add(mycommand); 
pipeline.Invoke(); 
runspace.Close(); 

該作品罰款編譯過程中,但是當我建立一個exe並嘗試運行它,我得到一個錯誤,說GetSvc.ps1文件不是fou ND。

如何使文件成爲構建的一部分?

+0

如果我明白你想要做的正確,你應該閱讀嵌入式資源。例如,您可以查看http://support.microsoft.com/kb/319292。 –

回答

1

使腳本的構建操作爲Embedded Resource。然後看看lines 149-155關於如何提取C#exe內部的腳本。在這個例子中,我壓縮了腳本以壓縮它。如果你跳過這一步,那麼你可以刪除第152行,並在第153行使用流而不是gZipStream。

+0

var的值不能爲null streamReader = new StreamReader(stream);該腳本被設置爲一個嵌入式資源,只有一個單一的線..不知道什麼即時做錯 – techmanc

+0

這聽起來像流是空的,所以這條線很可能失敗使用(流stream = assembly.GetManifestResourceStream(「 Resources.Script.ps1.gz「))'。不要驚訝於獲取資源的「名稱」往往是最棘手的部分,因爲它使用名稱空間名稱以及IIRC。在dotPeek或Reflector中打開編譯好的程序集並查看資源名稱實際是什麼並使用該名稱。 –

相關問題