2013-07-22 61 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未注册。这避免了操作系统的任何限制。

而且代码写在上面的应用程序的工作。准备好并测试!