2013-07-22 66 views
2

你好有一個包含21個代碼的文件在power shell中。我需要一種方法來在c#中使用按鈕來運行此文件。我在Visual Studio 2010中使用c#。請讓我知道是否有辦法實現。從c#應用程序運行powershell

// Powershell 
$Proc = Get-Process | Sort-Object CPU -Descending 
$cores = Get-WmiObject Win32_processor 
$memory = Get-WmiObject Win32_OperatingSystem 
$Total = 10 
$num = 1 

Clear-Content c:\scripts\prueba.txt 

foreach ($objItm in $Proc) { 
If ($num -gt $Total) { 
    break #break the loop 
} 

[string] $strID=[System.Convert]::ToString($objItm.ID) 
[string] $strProcessName=[System.Convert]::ToString($objItm.ProcessName) 
[string] $strCPU=[System.Convert]::ToString($objItm.CPU) 
[string] $strNUM=[System.Convert]::ToString($num) 

$info=$strNUM+"-"+$strID+"-"+$strProcessName+"-"+$strCPU 

$num += 1 

$info|Add-Content c://scripts/prueba.txt 

} 
//Code c# 
RunspaceConfiguration runspaceConfiguration = RunspaceConfiguration.Create(); 
Runspace runspace = RunspaceFactory.CreateRunspace(runspaceConfiguration); 
runspace.Open(); RunspaceInvoke scriptInvoker = new RunspaceInvoke(runspace); 
Pipeline pipeline = runspace.CreatePipeline(); 
pipeline.Commands.Add(scriptFile) 
Execute PowerShell script results = pipeline.Invoke(); 

我需要例如按下一個按鈕,使腳本發生

+1

是的,有一種方法可以實現這一點。你有什麼嘗試,你做了多少研究? – alroc

+0

那麼我一直在尋找並找到一種方式'RunspaceConfiguration runspaceConfiguration = RunspaceConfiguration.Create(); Runspace runspace = RunspaceFactory.CreateRunspace(runspaceConfiguration); runspace.Open(); RunspaceInvoke scriptInvoker = new RunspaceInvoke(runspace); 流水線pipeline = runspace.CreatePipeline(); pipeline.Commands.Add(scriptFile); //執行PowerShell腳本 results = pipeline.Invoke();' –

+0

但使用我的sp位置並且不起作用。我不知道還需要什麼,因爲第一個答案中的代碼已經在powershell中測試過並且工作完美 –

回答

0

您可以通過Ingo Karstein

這將創建一個C#可執行文件與它自己的PowerShell主機和嵌入式腳本使用PS2EXE

我有一個C#項目,它採用PS2EXE中的C#代碼,增加了讀取加密的powershell腳本內容的能力,解密並運行它。

0

一些提示,適用於我。我的應用程序已經開始着手

  1. 運行Visual Studio具有管理員爲此權限,以避免得到一個錯誤與HKEY_LOCAL ...

  2. 在電源外殼運行此得到-executionpolicy查看策略和設置未註冊set-executionpolicy未註冊。這避免了操作系統的任何限制。

而且代碼寫在上面的應用程序的工作。準備好並測試!