我正在尝试设置一个简单的.aspx网页,它将接受用户输入的字符串(稍后,多个字符串)并使用该字符串作为Powershell脚本的参数值。
PS脚本现在看起来像这样:
[CmdletBinding()]
param (
[string] $ServiceName
)
$ServiceName | out-file c:\it\test.txt
$ServiceName | Out-String
C#代码如下所示:
var shell = PowerShell.Create();
// Add the script to the PowerShell object
shell.Commands.AddScript("C:\\it\\test.ps1 -ServiceName BITS");
// Execute the script
var results = shell.Invoke();
当我跑步时,我得到" BITS"写入test.txt文件。我现在需要做的是设置应用程序来调用脚本,传入" ServiceName"参数。我找到了这个:Call PowerShell script file with parameters in C#并尝试了以下代码:
PowerShell ps = PowerShell.Create();
ps.AddScript(@"c:\it\test.ps1").AddParameter("ServiceName", "BITS");
var results = ps.Invoke();
在这种情况下,调用脚本并创建test.txt文件,但未将值(BITS)写入文件。我在这里错过了什么?为什么不将参数传递给脚本?
感谢。
答案 0 :(得分:0)
我最终使用
var ps = @"C:\it\test.ps1";
processInfo = new ProcessStartInfo("powershell.exe", "-File " + ps + " -ServiceName BITS);
我不喜欢这样,但它确实有效。 耸肩
答案 1 :(得分:0)
以下是包括我在内的未来读者的三种可能的解决方案:
using (PowerShell ps = PowerShell.Create())
{
//Solution #1
//ps.AddCommand(@"C:\it\test.ps1", true).AddParameter("ServiceName", "BITS");
//Solution #2
//ps.AddScript(@"C:\it\test.ps1 -ServiceName 'BITS'", true);
//Solution #3
ps.AddScript(File.ReadAllText(@"C:\it\test.ps1"), true).AddParameter("ServiceName", "BITS");
Collection<PSObject> results = ps.Invoke();
}
虽然我从https://blogs.msdn.microsoft.com/kebab/2014/04/28/executing-powershell-scripts-from-c/那里得到了这个主意,但我在其他任何地方都没有看到解决方案#3的文档。