Определите, был ли сценарий PowerShell получен из точек - PullRequest
13 голосов
/ 02 февраля 2011

Из сценария PowerShell, как я могу определить, был ли сценарий с точечным источником, т.е. он был вызван с

. .\myscript.ps1

вместо

.\myscript.ps1

ПРИМЕЧАНИЕ интересное сообщение в блоге (также) об этом: http://poshoholic.com/2008/03/18/powershell-deep-dive-using-myinvocation-and-invoke-expression-to-support-dot-sourcing-and-direct-invocation-in-shared-powershell-scripts/

Ответы [ 2 ]

13 голосов
/ 02 февраля 2011

Проверьте $ 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

11 голосов
/ 22 ноября 2015

В дополнение к полезный ответ Мьолинора :

tl; др

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

В то время как $MyInvocation.InvocationName -eq '.' в основном сообщает, что данный сценарий получен из точек, есть одно исключение :

[ Применяется, по крайней мере, PowerShell v3 ]
При запуске сценария из кода Visual Studio или PowerShell ISE с Debug > Run/Continue ( F5 ) он неявно получен,все же $MyInvocation.InvocationName содержит полное имя файла сценария, а не . Однако вы можете обнаружить этот случай, проверив, является ли $MyInvocation.Line пустым .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...