我有一个powershell脚本,比如:function2.ps1:
function try2
{
return "Hello"
}
然后在c#中,我有:
RunspaceConfiguration rsc = RunspaceConfiguration.Create();
Runspace rs = RunspaceFactory.CreateRunspace(rsc);
rs.Open();
RunspaceInvoke si = new RunspaceInvoke(rs);
PowerShell ps = PowerShell.Create();
ps.Commands.AddScript(". .\\function2.ps1");
ps.Invoke();
ps.AddCommand("try2");
ps.Invoke();
它发出 System.Managment.Automation.CommandNotFoundException 说 try2 不被识别为 cmdlet、函数、脚本文件的名称,等等等等。
这真的很棘手,我错过了什么?:)
更新:
function.ps1 位于:c:\function.ps1。
目前的做法是:
ps.Commands.AddScript(@"cd C:\; . .\function.ps1;try2");
ps.Invoke();
但仍然失败,甚至更有趣:
ps.Commands.AddScript(@"cd C:\; . .\function222222222222222222.ps1;try2");
ps.Invoke();
虽然我 100% 确定 function22222222222222222222.ps1 不存在但不会给出错误。确定提供文件路径有问题...
[更新]
原来是因为powershell文件中引用程序集的一些运行时错误:这个程序集是由比当前加载的运行时更新的运行时构建的,无法加载。
把目标框架从4.0改成3.5后,发现打印了hello!所以错误不是关于调用脚本,而是关于脚本本身。很抱歉造成混乱,谢谢大家!