【发布时间】:2014-09-01 08:27:30
【问题描述】:
Invoke-MyFunction 是我编写的一个命令行开关,它接受一个输入文件,对其进行更改,然后在指定位置创建一个新的输出文件。如果我在桌面上打开 PowerShell,导入 MyCommandlet.ps1,然后运行
Invoke-MyFunction -InputPath path\to\input -OutputPath path\to\output
一切都按预期进行。但是,当我尝试使用以下代码从 C# 程序导入和调用命令时,命令行开关不会运行,不会记录输出,也不会生成输出文件。它不会抛出 CommandNotFoundException,因此我假设 PowerShell 对象可以识别我的命令行开关。但我不知道为什么它不执行它。
//set up the PowerShell object
InitialSessionState initial = InitialSessionState.CreateDefault();
initial.ImportPSModule(new string[] { @"C:\path\to\MyCommandlet.ps1" });
Runspace runspace = RunspaceFactory.CreateRunspace(initial);
runspace.Open();
PowerShell ps = PowerShell.Create();
ps.Runspace = runspace;
//have MyFunction take input and create output
ps.AddCommand("Invoke-MyFunction");
ps.AddParameter("OutputPath", @"C:\path\to\output");
ps.AddParameter("InputPath", @"C:\path\to\input");
Collection<PSObject> output = ps.Invoke();
此外,调用 MyFunction 后,PowerShell 对象 ps 无法执行任何其他命令。甚至是已知的。
【问题讨论】:
-
我尝试过调用
Copy-Item而不是Invoke-MyFunction,这是可行的。所以我假设是关于Invoke-MyFunction的东西导致了这个问题。
标签: c# visual-studio powershell cmdlets