2011-02-02 12 views

risposta

12

controllare $ myinvocation.line Mostrerà la linea che è stata usata per chiamare lo script.

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 

È anche possibile controllare la proprietà .invocationname. Se lo script è stato dot-source, sarà solo un punto. In caso contrario, è sarà ./scriptname.ps1

+2

Grazie, InvocationName era esattamente quello che stavo cercando. –

+0

Il nome .Invocation sembra il migliore, con "line" il primo carattere potrebbe essere un punto con relativo percorso .. \ test.ps1 quando NOT punto surce, o quando dot sourced il prossimo carattere potrebbe non essere uno spazio. (Parents, preventivi, $ (ecc.) Quindi aggiungi l'eccezione @ mklement0 in basso. – HerbM

5

Per completare mjolinor's helpful answer:

tl; dr

$isDotSourced = $MyInvocation.InvocationName -eq '.' -or $MyInvocation.Line -eq '' 

Mentre $MyInvocation.InvocationName -eq '.'principalmente ti dice se un determinato script è essendo dot-sourced, c'è un'eccezione :

[Si applica come di almeno PowerShell v3]
Quando si esegue uno script dal Visual Studio Codice o PowerShell ISE con Debug > Run/Continue (F5), è implicitamente provenienza, ma $MyInvocation.InvocationName contiene il nome file completo dello script anziché . Tuttavia, è possibile rilevare questo caso controllando se $MyInvocation.Line è vuoto.

+1

Eccellente, ho passato molto tempo a determinare questo da LINE (a causa di ogni sorta di strane eccezioni) e voi ragazzi avete semplice e anche questa eccezione che Non sapevo aobut Thx – HerbM

Problemi correlati