C#中如何以相对路径运行PowerShell脚本?

4

我正在尝试从我的C#应用程序中运行PowerShell脚本。我知道如何使用绝对路径来实现:

    using (PowerShell pshell = PowerShell.Create())
    {
        pshell.AddScript( @"C:\Path\To\Webapp\psScript.ps1" );
        pshell.Invoke();
    }

我不知道如何使用相对路径。我的 psScript.ps1 与我的 Visual Studio 项目位于同一目录中,我想使用相对路径(例如./psScript.ps1),这样当我将我的项目发布/导出到不同的计算机上时,脚本的路径不会失效。
那么,在 PowerShell.AddScript() 方法中如何使用相对路径呢?任何帮助都将不胜感激!
我在这里查看了一下,但这并没有回答我的问题: PowerShell: Run command from script's directory
2个回答

6
请使用以下内容:
using (PowerShell pshell = PowerShell.Create())
    {
        string path=System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
        pshell.AddScript( path+"\\psScript.ps1" );
        pshell.Invoke();
    }

这个路径始终是相对于您的项目根目录的。


这个和 $(ProjectDir) 目录是一样的吗?我刚刚在你上面的例子中打印了 path 字符串的结果,它是一个非常不同的位置。尽管如此,还是非常感谢。这让我离找到解决方案更近了一步。 - touch my body
在您的情况下,“path”是可执行文件的路径,而不是项目根目录的路径。它与“pshell.AddScript(“psScript.ps1”);”相同。 - Hamlet Hakobyan

3
将您的脚本添加到项目中,并将“复制到输出目录”属性设置为“始终复制”或“仅在较新时复制”。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接