使用C#中的参数调用PowerShell脚本文件

时间:2014-07-03 11:23:33

标签: c# powershell

真的很挣扎。我尝试了各种不同的方式,但似乎没有任何工作。

- 使用addScript:我收到一个错误,告诉我我不能以这种方式调用参数,应该使用像ISE这样的UI?!

- 使用FilePath参数,我无法找到传递参数的正确方法(麻烦绑定)

这是我尝试的最新版本,并没有解除任何错误,但脚本没有执行,没有任何反应...

非常感谢帮助。

runspace = RunspaceFactory.CreateRunspace();
runspace.Open();
pipeline = runspace.CreatePipeline();

string script =
@"{param($merchantName, $appType, $gruntDirectory, $merchantInstanceDirectory, $editorConnectionString) "+
_config.MerchantInstance.Directory + @"\Generate_And_Compile_LESS.ps1"
+ " –merchantName $merchantName"
+ " –appType $appType"
+ " –gruntDirectory $gruntDirectory"
+ " -merchantInstanceDirectory $merchantInstanceDirectory"
+ " -editorConnectionString $editorConnectionString }";

Command compileCommand = new Command("Invoke-Command");
compileCommand.Parameters.Add("Scriptblock", ScriptBlock.Create(script));

var args = new List<string>();
args.Add(merchantName);
args.Add(appType.GetHashCode().ToString());
args.Add("'" + _config.Grunt.Directory + "'");
args.Add("'" + _config.MerchantInstance.Directory + "'");
args.Add("'" + _connectionStrings.AppConnectionString + "'");

compileCommand.Parameters.Add("ArgumentList", String.Join(",", args));

pipeline.Commands.Add(compileCommand);
Collection<PSObject> results = pipeline.Invoke();

1 个答案:

答案 0 :(得分:1)

您可以使用我个人刚刚测试过的代码。

static void Main(string[] args)
{
    PowerShell ps = PowerShell.Create();
    ps.AddScript(@"c:\test\test.ps1").AddParameter("param1", "paramvalue1");
    ps.Invoke();
}

这是我的测试脚本,位于c:\test\test.ps1

[CmdletBinding()]
param (
    [string] $param1
)
Set-Content -Path $PSScriptRoot\test.txt -Value $param1;

仅供参考,确保启动32位(x86)PowerShell,并将执行策略设置为Unrestricted。 Visual Studio是一个32位进程,默认情况下调用32位PowerShell引擎。