用c#调用带有参数的PowerShell脚本文件

本文关键字:PowerShell 脚本 文件 参数 调用 | 更新日期: 2023-09-27 18:11:13

真的很纠结。我试过各种不同的方法,但似乎都不管用。

-使用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();

用c#调用带有参数的PowerShell脚本文件

您可以使用下面的代码,我刚刚亲自测试过。

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,并将执行策略设置为无限制。Visual Studio是一个32位进程,默认调用32位的PowerShell引擎。