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

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

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

9 ответов

Решение

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

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

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

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

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

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

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

(Get-Command cmd).Path

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

(gcm cmd).Path

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

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

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

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

[Надрез]

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

Попробуйте это: get-command [ваша команда]

function which([string]$cmd) {gcm -ErrorAction "SilentlyContinue" $cmd | ft Definition}

я простоwhere.exe <command>в Powershell. Это самый простой подход, который я знаю. .exeчасть важна, кстати.

Несколько отличных ответов в этой теме, но я обнаружил, что псевдонимы Powershell немного сложно переопределять, а функции легче писать, поэтому я поместил это в свой профиль Powershell:

      function global:which ([string]$command) {
  if (-not($command)) { throw "ERROR: Please supply a command name" }
  (Get-Command $command).Path
}

Get-Command не находит .lnk или другие типы, а только исполняемые команды.

Для поиска $env:path для любого файла (включая .lnk) используйте

      @(where.exe <file pattern> 2>$null)[0]

Возвращает пустую строку, если ничего не найдено, иначе полный путь первой встречи.

В PowerShell 5.1 вы можете использовать

Get-Command <command> | Format-Table Name, CommandType, DisplayName, Definition, Description, Version

Путь указан в столбце «Определение».

Другие вопросы по тегам