【发布时间】:2018-03-11 05:27:25
【问题描述】:
从 PowerShell 脚本中,我如何确定该脚本是否是点源的,即它是否已被调用
. .\myscript.ps1
而不是
.\myscript.ps1
【问题讨论】:
标签: powershell
从 PowerShell 脚本中,我如何确定该脚本是否是点源的,即它是否已被调用
. .\myscript.ps1
而不是
.\myscript.ps1
【问题讨论】:
标签: powershell
检查 $myinvocation.line 它将显示用于调用脚本的行。
PS C:\scripts\test> gc test.ps1
$myinvocation.line
PS C:\scripts\test> ./test.ps1
./test.ps1
PS C:\scripts\test> . ./test.ps1
. ./test.ps1
您还可以检查 .invocationname 属性。如果脚本是点源的,那么它将只是一个点。如果没有,就是 ./scriptname.ps1
【讨论】:
$MyInvocation.CommandOrigin -ieq 'Internal'。但你做到了。
tl;dr
$isDotSourced = $MyInvocation.InvocationName -eq '.' -or $MyInvocation.Line -eq ''
虽然$MyInvocation.InvocationName -eq '.' 大部分会告诉您给定脚本是否是点源代码,但有一个例外:
[至少适用于 PowerShell v3]
当您使用 Debug > Run/Continue (F5) 从 Visual Studio Code 或 PowerShell ISE 运行脚本时,它是隐式 em> 来源,但 $MyInvocation.InvocationName 包含完整的脚本文件名而不是 . 但是,您可以通过检查 $MyInvocation.Line 是否为 empty 来检测这种情况。
【讨论】: