Powershell эквивалентен команде unix `which`?

24712
Herms

Есть ли в PowerShell эквивалент whichкоманды, найденной в большинстве (если не во всех) оболочках Unix?

Несколько раз я хотел бы узнать местоположение чего-то, что я запускаю из командной строки. В Unix я просто делаю, which <command>и это говорит мне. Я не могу найти эквивалент в Powershell.

59

4 ответа на вопрос

60
nagul

Об этом спрашивали и отвечали на Переполнение стека: эквивалент * Nix ', какая' команда в Powershell?

Самым первым псевдонимом, который я сделал, когда начал настраивать свой профиль в powershell, было «которое».

New-Alias which get-command 

Чтобы добавить это в свой профиль, введите:

"`nNew-Alias which get-command" | add-content $profile 

`N должен гарантировать, что это начнется как новая строка.

Именно то, что я искал. Спасибо! Herms 15 лет назад 0
28
FLGMwt

Начиная с PowerShell 3.0, вы можете сделать

(Get-Command cmd).Path 

Который также имеет преимущество перед ванильным Get-Command в возврате a, System.Stringтак что вы получите чистый * nixy однострочный вывод, к которому вы привыкли. Используя псевдоним gcm, мы можем уменьшить его до 11 символов.

(gcm cmd).Path 
Если `Get-Command` находит несколько результатов, он возвращает массив. Кроме того, если найденная команда не является исполняемым файлом, `Path` не определен (` $ null`). Это делает ответ здесь непрактичным для общего использования без значительных изменений. Для хорошего примера обоих этих случаев попробуйте `Get-Command where`. jpmc26 10 лет назад 3
This should be the accepted answer as it actually tells you what is the Powershell equivalent of the *NIX command `where` rather than teaching you how to set aliases on Powershell, which is not the title of the question. mastazi 9 лет назад 0
@mastazi: Но это невозможно для встроенных функций, что является регрессией по сравнению, например, с ** zsh **'`s`. (Между прочим, `where` - это на самом деле утилита * Windows *, которая может выполнять множество различных задач, одна из которых * приблизительно * приближается к поиску команды вдоль` PATH`.) Кроме того, ** ничего нет * * неправильно с ответом, который объясняет, как делать то, что спросили *, а также с другой, немного более сложной вещью, построенной на этом. SamB 6 лет назад 1
6
Anonymous

Также ответил в 2008 году: есть ли эквивалент «который» на окнах?

Попробуйте whereкоманду, если вы установили Resource Kit: http://ss64.com/nt/where.html

Наиболее важные части ответа:

Windows Server 2003 и более поздние версии предоставляют WHEREкоманду, которая выполняет некоторые действия, хотя и соответствует всем типам файлов, а не только исполняемым командам.

[Надрез]

В Windows PowerShell вы должны ввести where.exe.

3
hshen
function which([string]$cmd)