C# 使用System.Management.Automation调用Powershell ps1文件

C# 使用System.Management.Automation调用Powershell ps1文件,c#,powershell,C#,Powershell,我有以下c#代码: 但我收到错误消息Powershell ps1文件“未被识别为cmdlet、函数、可操作程序或脚本文件” MyScript.ps1被复制到bin文件夹,因此它与正在运行的程序处于同一级别 我找到了这个 但这并没有解决问题。知道还有什么会导致此错误吗?问题可能是您的应用程序从父进程继承了其工作目录,因此您无法预测是否引用了可执行文件所在的目录 您可以使用以下内容构造脚本的完整路径: using System.Reflection; using System.IO; // ...

我有以下c#代码:

但我收到错误消息Powershell ps1文件“未被识别为cmdlet、函数、可操作程序或脚本文件”

MyScript.ps1被复制到bin文件夹,因此它与正在运行的程序处于同一级别

我找到了这个


但这并没有解决问题。知道还有什么会导致此错误吗?

问题可能是您的应用程序从父进程继承了其工作目录,因此您无法预测
是否引用了可执行文件所在的目录

您可以使用以下内容构造脚本的完整路径:

using System.Reflection;
using System.IO;

// ...

string exePath = Assembly.GetExecutingAssembly().Location;
string exeFolder = Path.GetDirectoryName(exePath);

string scriptPath = Path.Combine(exeFolder,"MyScript.ps1");

var command = new Command(". " + scriptPath);

如果调用
new命令(“Get Location”),输出是什么相反?嗨,Mathias,我今晚晚些时候会查。但是我已经试着把文件读到一个变量,然后像这样传入,但是我得到了同样的错误。一旦我尝试getlocation,我会让你知道。你不应该在脚本文件名之前使用
。嗨,Mathias,我使用了你的代码,但我仍然得到了异常{术语“.C:\\ProjectFolder\\bin\\Debug\\MyScript.ps1”未被识别为cmdlet、函数、脚本文件或可操作程序的名称。请检查名称的拼写,或者如果包含路径,请验证路径是否正确,然后重试。“}路径是正确的,我可以打开文件。你知道为什么会发生这种情况吗?@doorman我也有同样的问题,但那是因为我们没有正确地转义其他脚本的字符串。例如,你需要
new命令(“.+scriptPath+”);
using System.Reflection;
using System.IO;

// ...

string exePath = Assembly.GetExecutingAssembly().Location;
string exeFolder = Path.GetDirectoryName(exePath);

string scriptPath = Path.Combine(exeFolder,"MyScript.ps1");

var command = new Command(". " + scriptPath);