用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();
您可以使用下面的代码,我刚刚亲自测试过。
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引擎。