从PowerShell脚本,我如何确定脚本是否已经过点源,即它已被调用
. .\myscript.ps1
Run Code Online (Sandbox Code Playgroud)
而不是
.\myscript.ps1
Run Code Online (Sandbox Code Playgroud)
注意一个有趣的博客文章(也)关于这个:http://poshoholic.com/2008/03/18/powershell-deep-dive-using-myinvocation-and-invoke-expression-to-support-dot-sourcing-and -direct-调用功能于共享的powershell的脚本/
mjo*_*nor 13
检查$ 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
Run Code Online (Sandbox Code Playgroud)
您还可以检查.invocationname属性.如果脚本是点源的,它只是一个点.如果没有,那将是./scriptname.ps1
mkl*_*nt0 11
TL;博士
$isDotSourced = $MyInvocation.InvocationName -eq '.' -or $MyInvocation.Line -eq ''
Run Code Online (Sandbox Code Playgroud)
虽然$MyInvocation.InvocationName -eq '.' 主要是告诉您给定脚本是否是点源,但有一个例外:
[ 适用于至少PowerShell v3 ]
当您从Visual Studio代码或带有()的PowerShell ISE运行脚本时,它是隐式获取的,但包含完整的脚本文件名而不是,但是,您可以通过检查是否是空的.Debug > Run/ContinueF5$MyInvocation.InvocationName.$MyInvocation.Line
| 归档时间: |
|
| 查看次数: |
1802 次 |
| 最近记录: |