Как спросить PowerShell, где что-то находится?
Например, «какой блокнот» и возвращает каталог, из которого запускается notepad.exe в соответствии с текущими путями.
unix
powershell
command
DevelopingChris
источник
источник
Get-Command <command> | Format-Table Path, Name
поэтому я могу получить путь, где находится команда тоже.select -expandproperty Path
.(gcm <command>).definition
для получения пути.gcm
является псевдонимом по умолчанию дляGet-Command
. Вы можете также использовать групповые символы, например:(gcm win*.exe).definition
.Вот фактический * nix-эквивалент, то есть он выводит * nix-стиль.
Просто замените то, что вы ищете.
Когда вы добавите его в свой профиль, вы захотите использовать функцию, а не псевдоним, потому что вы не можете использовать псевдонимы с каналами:
Теперь, когда вы перезагрузите свой профиль, вы можете сделать это:
источник
okta
который указывает на скрипт Powershellokta.ps1
, которого нет у меня$PATH
. Использование принятого ответа возвращает имя скрипта (okta -> okta.ps1
). Это нормально, но это не говорит мне местоположениеokta.ps1
. Использование этого ответа, однако, дает мне весь путь (C:\Users\blah\etc\scripts\okta.ps1
). Так что +1 от меня.Я обычно просто набираю:
или
gcm - это псевдоним по умолчанию для Get-Command.
В моей системе gcm note * выводит:
Вы получаете каталог и команду, которые соответствуют тому, что вы ищете.
источник
gcm note* | select CommandType, Name, Definition
. Если вы запускаете его часто, вам, вероятно, следует обернуть его в функцию.Попробуйте этот пример:
источник
(gcm py.exe).path
Мое предложение для какой функции:
источник
Быстрый и грязный матч Unix
which
являетсяНо он возвращает несколько строк, если они существуют, то становится
источник
where.exe where
должен сказать вамC:\Windows\System32\where.exe
where.exe
эквивалентноwhich -a
, так как он вернет все соответствующие исполняемые файлы, а не только первый, который будет выполнен. То естьwhere.exe notepad
даетc:\windows\notepad.exe
иc:\windows\system32\notepad.exe
. Так что это особенно не подходит для формы$(which command)
. (Другая проблема заключается в том, что в случае, если команда не найдена, она выведет полезное полезное сообщение об ошибке, которое также не будет расширяться$()
- это можно исправить/Q
, но не как псевдоним.)where
кажется, что поиск системной переменной PATH, а не текущей переменной PATH оболочки. Смотрите этот вопросКажется, это делает то, что вы хотите (я нашел это на http://huddledmasses.org/powershell-find-path/ ):
источник
Проверьте этот PowerShell, который .
Код, представленный там, предлагает это:
источник
Мне нравится
Get-Command | Format-List
, или короче, использование псевдонимов для двух и только дляpowershell.exe
:Вы можете найти псевдонимы как это:
Завершение вкладки работает с
gcm
.источник
Попробуйте
where
команду в Windows 2003 или более поздней версии (или Windows 2000 / XP, если вы установили Resource Kit).Кстати, это получило больше ответов на другие вопросы:
Есть ли эквивалент «который» в Windows?
PowerShell, эквивалентный
which
команде Unix ?источник
where
псевдонимыWhere-Object
командлета в Powershell, поэтому вводwhere <item>
в приглашении Powershell ничего не даст. Таким образом, этот ответ совершенно неверен - как отмечено в принятом ответе в первом связанном вопросе, чтобы получить DOSwhere
, вам нужно набратьwhere.exe <item>
.У меня есть эта
which
расширенная функция в моем профиле PowerShell:источник
Использование:
Или эта версия, вызывающая оригинальную команду where.
Эта версия также работает лучше, потому что она не ограничивается файлами bat:
источник
Если вы хотите получить команду, которая принимает входные данные из конвейера или в качестве параметра, попробуйте это:
скопируйте и вставьте команду в свой профиль (
notepad $profile
).Примеры:
источник