У меня есть псевдоним для touch, созданный в моем $profile, однако я также использую PSCX, похоже, у него есть собственный touch. Когда я запускаю touch, запускается PSCX:

$ which touch
Pscx\Set-FileTime

Как сделать так, чтобы PowerShell предпочитал мой псевдоним псевдониму модулей?

1
mikemaccana 23 Окт 2018 в 19:45

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) - а затем определите его по мере необходимости, что, однако, означает, что другие области больше не будут видеть исходное определение.

2
mklement0 23 Окт 2018 в 20:40

Сделаю это как ответ, а не комментарий, чтобы я мог набрать больше текста.

См. https://serverfault.com/questions/452430/how -в - переопределение -The- умолчанию -Dir - псевдоним -в- PowerShell

Мнение следующее:

Однако, в зависимости от вашего использования, я настоятельно рекомендую не использовать псевдонимы в любом скрипте или модуле, поскольку они могут быть изменены и не могут выполнять нужные вам действия.

Если вы действительно хотите использовать псевдоним, я мог бы просто избежать всего этого и создать неконфликтный псевдоним, который все еще имеет смысл. Может быть, tf или tfile для TouchFile.

0
Kory Gill 23 Окт 2018 в 18:42
52954076