3
votes

I am a beginner Powershell user. I am writing some script files (.ps1)

I would like to determine how my script was invoked:

Was is the "main" script or was it dot sourced from another file?

In python, I would use something like:

if __name__ == "__main__":

Is there something similar in PowerShell?

Update

After reading the answers, I am using the following at the end of my .ps1 file:

if ($MyInvocation.InvocationName -ne '.')
{
  # do "main" stuff here
}

Any answers that include how this could fail are welcome.

It appears this is a duplicate question, I just didn't use the right search terms: Determine if PowerShell script has been dot-sourced

1
@HyperAnthony thanks for the link. Is there a equivalent one-liner for PowerShell to the python version? I understand that PowerShell scripts are ran from top to bottom. So I'd like to put a test condition near the bottom of my script that only if it passes, does the remainder of the script run.Josh Petitt

1 Answers

5
votes

If you're wanting to know how it was invoked, have a look at the $myinvocation automatic variable.

If you just want to test if you're in the global scope:

Try {if (get-variable args -scope 1){$true}}
Catch {$false}

should return $true if you're running in a child scope. If you're already in the global scope, there is no parent scope and it will throw an error and return $false.