Nomistake
Nomistake

Reputation: 863

Powershell: Getting path of A_Script.ps1 execution location

I would like to execute a program.exe which resides next to the script.ps1 file... How can i get this location/folder? (this is not a fixed location/folder, can be a usb stick or network drive etc)

I have tried to use

$MyInvocation.MyCommand.Path

But it seems not to be helping me (or i'm not using it the rigth way)

Thanks

Upvotes: 0

Views: 2641

Answers (1)

David Martin
David Martin

Reputation: 12248

This is the pattern I normally use:

$exeName        = "MyApplication.exe"
$scriptFolder   = Split-Path -Parent $MyInvocation.MyCommand.Path
$exeFullPath    = Join-Path -Path $scriptFolder -ChildPath $exeName

$MyInvocation is an automatic variable.

Contains an information about the current command, such as the name, parameters, parameter values, and information about how the command was started, called, or "invoked," such as the name of the script that called the current command.

Note that the object returned by $MyInvocation.MyCommand is different depending upon the context from which it was executed.

The type ScriptInfo is returned from the powershell command window, notice the lack of Path property:

   TypeName: System.Management.Automation.ScriptInfo

Name          MemberType     Definition
----          ----------     ----------
Equals        Method         bool Equals(System.Object obj)
GetHashCode   Method         int GetHashCode()
GetType       Method         type GetType()
ToString      Method         string ToString()
CommandType   Property       System.Management.Automation.CommandTypes CommandType {get;}
Definition    Property       System.String Definition {get;}
Module        Property       System.Management.Automation.PSModuleInfo Module {get;}
ModuleName    Property       System.String ModuleName {get;}
Name          Property       System.String Name {get;}
OutputType    Property       System.Collections.ObjectModel.ReadOnlyCollection`1[[System.Management.Automation.PSTyp...
Parameters    Property       System.Collections.Generic.Dictionary`2[[System.String, mscorlib, Version=2.0.0.0, Cult...
ParameterSets Property       System.Collections.ObjectModel.ReadOnlyCollection`1[[System.Management.Automation.Comma...
ScriptBlock   Property       System.Management.Automation.ScriptBlock ScriptBlock {get;}
Visibility    Property       System.Management.Automation.SessionStateEntryVisibility Visibility {get;set;}
HelpUri       ScriptProperty System.Object HelpUri {get=try...

Whereas the type is ExternalScriptInfo when run from a script, notice the additional properties ScriptContents and Path etc.

   TypeName: System.Management.Automation.ExternalScriptInfo

Name             MemberType     Definition
----             ----------     ----------
Equals           Method         bool Equals(System.Object obj)
GetHashCode      Method         int GetHashCode()
GetType          Method         type GetType()
ToString         Method         string ToString()
CommandType      Property       System.Management.Automation.CommandTypes CommandType {get;}
Definition       Property       System.String Definition {get;}
Module           Property       System.Management.Automation.PSModuleInfo Module {get;}
ModuleName       Property       System.String ModuleName {get;}
Name             Property       System.String Name {get;}
OriginalEncoding Property       System.Text.Encoding OriginalEncoding {get;}
OutputType       Property       System.Collections.ObjectModel.ReadOnlyCollection`1[[System.Management.Automation.PS...
Parameters       Property       System.Collections.Generic.Dictionary`2[[System.String, mscorlib, Version=2.0.0.0, C...
ParameterSets    Property       System.Collections.ObjectModel.ReadOnlyCollection`1[[System.Management.Automation.Co...
Path             Property       System.String Path {get;}
ScriptBlock      Property       System.Management.Automation.ScriptBlock ScriptBlock {get;}
ScriptContents   Property       System.String ScriptContents {get;}
Visibility       Property       System.Management.Automation.SessionStateEntryVisibility Visibility {get;set;}
HelpUri          ScriptProperty System.Object HelpUri {get=try...

Upvotes: 3

Related Questions