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
,
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
Путь указан в столбце «Определение».