Что означает этот фрагмент PowerShell (справка по синтаксическому анализу!) - PullRequest
0 голосов
/ 19 ноября 2010

В моем профиле есть следующий фрагмент скрипта PowerShell:

. (join-path (split-path (& { $myInvocation.ScriptName })) "export-errors.ps1")

Теперь я понимаю, что это приводит к выполнению скрипта export-errors.ps1, который существует в том же каталоге, что и скрипт моего профиля.Мой вопрос: почему?

Я не понимаю, почему конструкция & { xxx } отличается от xxx в этом случае.Я пытался использовать эту похожую конструкцию:

$lame = join-path (split-path $myinvocation.mycommand.definition) "_lame\lame.exe"

Однако это не работает.Я получаю сообщения о том, что провайдеры не существуют, и я не совсем понимаю, почему.

Почему первая конструкция работает, а вторая нет?

ОБНОВЛЕНИЕ

Мне стало ясно, что я преследовал не ту ошибку.Действительно, обе конструкции работают при определенных условиях.Условие, при котором я выполнял вторую конструкцию, - это условие, при котором НИ ОДНА не работает.Я опубликую отдельный вопрос по этому вопросу.

Кит почти наверняка прав, когда говорит, что первая конструкция - это попытка обойти определенные странности.Это была копия-вставка из долгого времени назад.

1 Ответ

2 голосов
/ 19 ноября 2010

Этот синтаксис, вероятно, является чрезмерным для точечного поиска в вашем профиле. В контексте вашего скрипта profile.ps1 должно быть достаточно:

. (join-path (split-path $MyInvocation.MyCommand.Path) export-errors.ps1)

Конечно, если вы используете точечный источник более чем одного файла, вы можете пойти по этому пути:

$ScriptPath = $MyInvocation.MyCommand.Path
$ScriptDir = Split-Path $ScriptPath -Parent
. $ScriptDir\lib.ps1

Я полагаю, что ваш оригинальный подход пытается обойти проблему, описанную в этом сообщении в блоге .

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