У меня есть псевдоним для touch
, созданный в моем $profile
, однако я также использую PSCX, похоже, у него есть собственный touch
. Когда я запускаю touch
, запускается PSCX:
$ which touch
Pscx\Set-FileTime
Как сделать так, чтобы PowerShell предпочитал мой псевдоним псевдониму модулей?
2 ответа
В вашем $PROFILE
:
Сначала , явно импортируйте модуль
PSCX
- в этот момент псевдоним этого модуляtouch
импортируется и заменит любое существующее определение:Import-Module PSCX
- Примечание. Добавьте
Import-Module PSCX
, даже если его сейчас нет в вашем$PROFILE
; обычно это модуль загружается автоматически , по запросу , поскольку находится в одном из каталогов, перечисленных в переменной среды$env:PSModulePath
.
Именно импорт по требованию - время которого непредсказуемо (когда вы впервые вызываете команду из модуля) - препятствует надежной замене псевдонима; принудительный импорт модуля в ваш$PROFILE
до определения вашей версии псевдонима решает эту проблему.
- Примечание. Добавьте
Затем переопределите псевдоним по мере необходимости; например:
Set-Alias touch touch.exe
- Предупреждение : если кто-то принудительно повторно импортирует модуль позже с помощью
Import-Module -Force PSCX
, ваш псевдоним снова будет заменен.
- Предупреждение : если кто-то принудительно повторно импортирует модуль позже с помощью
Примечание. В этом нет необходимости указывать конкретный псевдоним, но для замены псевдонимов, определенных с помощью -Option AllScope
(верно для встроенных псевдонимов, таких как dir
и select
), вы столкнулись с двумя неоптимальными вариантами:
Либо: переопределите его с помощью
-Option AllScope
, что, однако, означает, что все области видят новое определение; например,Set-Alias -Option AllScope touch touch.exe
.Или: сначала удалите исходный псевдоним - например,
Remove-Item alias:touch
(PSv6 +:Remove-Alias touch
) - а затем определите его по мере необходимости, что, однако, означает, что другие области больше не будут видеть исходное определение.
Сделаю это как ответ, а не комментарий, чтобы я мог набрать больше текста.
См. https://serverfault.com/questions/452430/how -в - переопределение -The- умолчанию -Dir - псевдоним -в- PowerShell
Мнение следующее:
Однако, в зависимости от вашего использования, я настоятельно рекомендую не использовать псевдонимы в любом скрипте или модуле, поскольку они могут быть изменены и не могут выполнять нужные вам действия.
Если вы действительно хотите использовать псевдоним, я мог бы просто избежать всего этого и создать неконфликтный псевдоним, который все еще имеет смысл. Может быть, tf
или tfile
для TouchFile.
Новые вопросы
powershell
PowerShell - это кроссплатформенная утилита командной строки и сценариев от Microsoft. Используйте этот тег только для вопросов о написании и выполнении сценариев PowerShell. Вопросы программирования, относящиеся к кроссплатформенной версии PowerShell Core (Windows, macOS и Linux), должны быть помечены [powershell-core]. Вопросы о системном администрировании следует задавать в случае сбоя суперпользователя или сервера.