4

I'm trying to run a PowerShell script from my C# application. I know how to do so with an absolute path:

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

What I don't know how to do is use a relative path. My psScript.ps1 is located in the same directory as my Visual Studio project, and I'd like to use a relative path (such as ./psScript.ps1), so that when I publish/export my project to different computers, the path to the script doesn't become invalidated

Sooo, how do I use a relative path in the PowerShell.AddScript() method? Any help would be appreciated!

I looked here but this doesn't answer my question: PowerShell: Run command from script's directory

Community
  • 1
  • 1
touch my body
  • 1,634
  • 22
  • 36

2 Answers2

6

Use this:

using (PowerShell pshell = PowerShell.Create())
    {
        string path=System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
        pshell.AddScript( path+"\\psScript.ps1" );
        pshell.Invoke();
    }

This path is always relative to the root folder of your project.

Tomislav
  • 3,181
  • 17
  • 20
  • Is this the same as the `$(ProjectDir)` directory? I just printed the result of the `path` string in your above example and it was a very different location. Thank you, nonetheless. This puts me a lot closer to finding the solution than I was before – touch my body Aug 04 '15 at 23:43
  • `path` in your case is the path of the executable not of the project root. It is same as `pshell.AddScript( "psScript.ps1" );` – Hamlet Hakobyan Aug 05 '15 at 00:30
3

Add your script to project and set Copy to output directory property to Copy always or Copy id newer

Hamlet Hakobyan
  • 32,965
  • 6
  • 52
  • 68