我有一个存储在文件中的PowerShell脚本.在Windows PowerShell中,我执行脚本为
.\MergeDocuments.ps1 "1.docx" "2.docx" "merge.docx"
我想从C#调用脚本.目前我使用Process.Start如下工作:
Process.Start(POWERSHELL_PATH, string.Format("-File \"{0}\" {1} {2}", SCRIPT_PATH, string.Join(" ", filesToMerge), outputFilename));
我想使用Pipeline类运行它,类似于下面的代码,但我不知道如何传递参数(请记住,我没有命名参数,我只是使用$ args)
// create Powershell runspace
Runspace runspace = RunspaceFactory.CreateRunspace();
runspace.Open();
RunspaceInvoke runSpaceInvoker = new RunspaceInvoke(runspace);
runSpaceInvoker.Invoke("Set-ExecutionPolicy Unrestricted");
// create a pipeline and feed it the script text (AddScript method) or use the filePath (Add method)
Pipeline pipeline = runspace.CreatePipeline();
Command command = new Command(SCRIPT_PATH);
command.Parameters.Add("", ""); // I don't have named paremeters
pipeline.Commands.Add(command);
pipeline.Invoke();
runspace.Close();
Run Code Online (Sandbox Code Playgroud)
sh_*_*alh 17
刚刚在另一个问题的评论中找到了它
为了将参数传递给$ args传递null作为参数名称,例如 command.Parameters.Add(null, "some value");
该脚本被称为:
.\MergeDocuments.ps1 "1.docx" "2.docx" "merge.docx"
这是完整的代码:
class OpenXmlPowerTools
{
static string SCRIPT_PATH = @"..\MergeDocuments.ps1";
public static void UsingPowerShell(string[] filesToMerge, string outputFilename)
{
// create Powershell runspace
Runspace runspace = RunspaceFactory.CreateRunspace();
runspace.Open();
RunspaceInvoke runSpaceInvoker = new RunspaceInvoke(runspace);
runSpaceInvoker.Invoke("Set-ExecutionPolicy Unrestricted");
// create a pipeline and feed it the script text
Pipeline pipeline = runspace.CreatePipeline();
Command command = new Command(SCRIPT_PATH);
foreach (var file in filesToMerge)
{
command.Parameters.Add(null, file);
}
command.Parameters.Add(null, outputFilename);
pipeline.Commands.Add(command);
pipeline.Invoke();
runspace.Close();
}
}Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
26541 次 |
| 最近记录: |