2011-02-02 17 views

Respuesta

12

Comprobar $ myinvocation.line Mostrará la línea que se utilizó para llamar al 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 

También puede marcar la propiedad .invocationname. Si el guión fue de fuente de puntos, solo será un punto. Si no es así, es será ./scriptname.ps1

+2

Gracias, InvocationName era exactamente lo que estaba buscando. –

+0

El nombre de invocación parece ser el mejor, con "línea", el primer carácter podría ser un punto con una ruta relativa ... \ test.ps1 cuando NO aparece punto, o cuando el origen del punto es posible que el siguiente carácter no sea un espacio. (parens, comillas, $ (etc) A continuación, agregue la excepción @ mklement0 a continuación. – HerbM

5

Para complementar mjolinor's helpful answer:

tl; dr

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

Mientras $MyInvocation.InvocationName -eq '.'mayoría le indica si un guión dado es Siendo fuente de puntos, hay una excepción :

[es válida a partir de al menos PowerShell v3]
Cuando se ejecuta un script desde código de Visual Studio o la PowerShell ISE con Debug > Run/Continue (F5), es implícitamente de origen, sin embargo, $MyInvocation.InvocationName contiene el nombre de archivo completo del script en lugar de . Sin embargo, puede detectar este caso comprobando si $MyInvocation.Line es vacío.

+1

Excelente, pasé mucho tiempo tratando de determinar esto de LINE (debido a todo tipo de excepciones raras) y ustedes lo tienen simple e incluso esta excepción que No lo sabía. Thx – HerbM

Cuestiones relacionadas