Как Майк Sh услужливо советует , прокси-функция (функция-обертка) - это путь к go:
Создайте свою функцию go
в качестве прокси-функции (оболочки) (или сценария) для командлета Set-Location
, как показано в этого ответа .
Добавление пользовательских функций непосредственно в эту оболочку function.
go
- это единственная функция, которая обеспечивает как Set-Location
функциональность, так и желаемую пользовательскую функциональность, поэтому достаточно Set-Alias cd go -Option AllScope
.
Важно : Так как вы изменяете встроенный псевдоним в сеансе, убедитесь, что ваша go
функция является истинным расширенным набором функциональности Set-Location
; то есть убедитесь, что он не изменяет и не ограничивает исходное поведение - в противном случае сторонний код может работать неправильно.
Мне пришлось использовать -Option AllScope, чтобы заставить это работать, Кто-нибудь знает, почему я не могу просто повторно использовать псевдоним CD без этого?
Встроенный псевдоним cd
определяется как -Option AllScope
; любой псевдоним, определенный таким образом, может быть изменен только в том случае, если в повторно указано с помощью Set-Alias
.
, снова указывается
. Причина в том, что -Option AllScope
означает, что псевдоним автоматически присутствует в любой области, что фактически означает, что указанное определение применяется для всей сессии .
без -Option AllScope
, Set-Alias
создает / изменяет псевдоним только в области single - которая является либо областью current по умолчанию, либо целью, для которой задан необязательный параметр -Scope
- хотя все потомки Области этой области видят определение тоже.
Это противоречит ранее существовавшему определению -Option AllScope
для данного имени псевдонима, поэтому PowerShell предоставляет вам два варианта разрешения противоречия:
Измените существующее определение AllScope
, о котором вы должны сообщить, указав -Option AllScope
как часть переопределения , что, очевидно, означает, что вы изменяете в масштабе сеанса д определение псевдонима.
Удалить существующее AllScope
определение с Remove-Alias
(что не желательно, особенно с встроенный псевдонимы), который затем позволяет вам создать псевдоним области действия c псевдоним (с помощью пропуск -Option AllScope
).
Обратите внимание, что если вы создаете псевдоним без -Option AllScope
, но в области global (например, через файл $PROFILE
или с -Scope Global
), эффект будет похожи на -Option AllScope
, учитывая, что потомки видят также определение, а все области являются потомками глобальной области видимости (включая модули) [1 ] .
Однако любая область-потомок может переопределить глобальное определение.
[1] Технически возможно создать области не связан с глобальной областью действия, но этот вариант малоизвестен и редко используется на практике.