PowerShell эквивалентен команде Unix `which`?

69

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

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

Herms
источник

Ответы:

71

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

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

New-Alias, который получает команду

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

"` nNew-Alias, который получает команду "| профиль add-content $

`N в начале последней строки означает, что она будет начинаться как новая строка.

Нагул
источник
35

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

(Get-Command cmd).Path

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

(gcm cmd).Path
FLGMwt
источник
4
Если Get-Commandнаходит несколько результатов, он возвращает массив. Кроме того, если найденная команда не является исполняемым файлом, Pathона не определена ( $null). Это делает ответ здесь непрактичным для общего использования без значительных изменений. Для хорошего примера обоих этих случаев попробуйте Get-Command where.
jpmc26
1
Это должен быть принятый ответ, поскольку он фактически говорит вам, что является эквивалентом Powershell для команды * NIX, whereа не учит, как устанавливать псевдонимы в Powershell, что не является названием вопроса.
мастази
3
@mastazi: Но это не удается для внутренних команд, что является регрессионным по сравнению , например , ЗШ «s which. ( whereМежду прочим, на самом деле это утилита Windows, которая может выполнять множество разных задач, одна из которых приблизительно соответствует поиску команды вдоль PATH.) Кроме того, нет ничего плохого в ответе, который объясняет, как делать то, что было задано, и еще одна, немного более сложная вещь, построенная на этом.
SamB
7

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

Попробуйте whereкоманду, если вы установили Resource Kit.

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

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

[Надрез]

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

анонимное
источник
3
function which([string]$cmd) {gcm -ErrorAction "SilentlyContinue" $cmd | ft Definition}
hshen
источник