2017-02-22 31 views
-1

我试图自动运行一个PowerShell脚本以及其他程序的运行。从C#运行Powershell“IEX”#

手动运行PowerShell脚本,我通常会做一个命令提示符:

powershell "IEX (New-Object Net.WebClient).DownloadString('http://serverurl/Script.ps1'); Invoke-Method" 

我似乎无法复制这在C#中使用内置的“PowerShell中”命令来挽救我的生命。我“宁愿没有使用像‘过程’,所以任何建议将是有益的

+0

向我们展示了什么你已经想如果你从C#运行这个,那么你已经到了一个'System.Net.WebClient'直接访问!对象,并且您可以访问PowerShell对象上的'.AddScript()'方法,因此您不需要'iex'在PowerShell运行空间内。 – briantist

+0

所有这些都在执行[this C#statement](https://msdn.microsoft.com/en-us/library/fhd1f0sw(v = vs.110).aspx)。这会下载它。然后使用'PowerShellInstance.AddScript()'来执行它。 – Icemanind

+0

我能够使用下面标记的答案使其工作。对不起,我不擅长发布问题,但还没有,特别是代码。 – user3394319

回答

1

由于System.Net.WebClient是一个.NET类,你不需要PowerShell来使用它。

string script = (new System.Net.WebClient()).DownloadString('http://serverurl/Script.ps1'); 

要执行脚本,使用System.Management.Automation.PowerShell类:

using System.Management.Automation; 
// ... 

using(PowerShell ps = PowerShell.Create()) 
{ 
    ps.AddScript(script).AddScript("Invoke-Method"); 
    ps.Invoke(); 
} 
+0

似乎没有按预期工作。它说我试图调用的方法不是有效的cmdlet/etc/etc。 – user3394319

+0

“Script1.ps1”包含了什么? –

+0

一组函数。几乎就像一个模块。就像我说的,它可以在命令行中使用IEX语法。 – user3394319