Эквивалент «где» CMD в PowerShell


62

Кажется, я не могу найти что-нибудь о Powershell, эквивалентном whereкоманде из cmd. Должен ли я просто позвонить с cmdили есть что-то более элегантное в PS?


Интересное чтение я нашел когда-то еще на Where.exe и Get-ChildItem: blogs.technet.com/b/heyscriptingguy/archive/2010/07/24/…
Шон Мелтон

Ответы:


59

Используйте Get-Commandкомандлет, передав ему имя исполняемого файла. Он заполняет свойство Path возвращаемого объекта (типа ApplicationInfo ) полностью разрешенным путем к исполняемому файлу.

# ~> (get-command notepad.exe).Path
C:\WINDOWS\system32\notepad.exe

8
Если вы часто этим пользуетесь, вы можете сокращать команду, gcmвместо того, чтобы вводить Get-Commandслово целиком каждый раз
Моше Кац

@MosheKatz Спасибо! gcm notepadработал отлично для меня, когда я просто хочу посмотреть, какой файл я звоню.
Шон Ван

1
И вот, мальчики и девочки, вы слишком усложняете полезные вещи, которые уже были правильными. Если это не сломано, не исправляйте это.
AFP_555

Большое спасибо за эту команду. Я могу добавить тип без жесткого кодирования пути.
Джейсон TEPOORTEN

22

Если вам нужна такая же функциональность без вызова cmd, вы можете звонить where.exeиз powershell, пока C:\Windows\System32вы на пути. Команда where(без .exe) имеет псевдоним Where-Object, поэтому просто укажите полное имя.

PS C:\Users\alec> where
cmdlet Where-Object at command pipeline position 1
...

PS C:\Users\alec> where.exe
The syntax of this command is:

WHERE [/R dir] [/Q] [/F] [/T] pattern...

8

Get-ChildItem C:\SomeDir -Recurse *.dll

Это в значительной степени то, что делает старый файл where.exe ... была ли более специфическая функциональность, которую вы пытаетесь имитировать?

Изменить: В ответ на комментарий Джошуа ... о, вы тоже хотите искать переменные среды PATH? Нет проблем.

Foreach($_ In $Env:Path -Split ';')
{
    Get-ChildItem $_ -Recurse *.dll
}

1
«где» также ищет PATH
Джошуа Маккиннон

3
oh, you want to search your PATH environment variables too? Хм, да, это весь смысл в whereпротивном случае вы можете просто использовать dir. Производная :-P
Synetech

4

whereне встроенная cmdкоманда Это отдельное приложение ( where.exe), поэтому, строго говоря, PowerShell «не нуждается в замене».

Так почему же не whereработает в PowerShell? Вроде ничего не делает

PS C:\> where where
PS C:\>

По умолчанию whereиспользуется псевдоним встроенного командлета PS.

PS C:\> get-help where

NAME
    Where-Object
...
ALIASES
    where
    ?

Ну, это приятно знать, но есть ли способ избежать звонка where-objectпри попытке позвонить where.exe?

Ответ - да.

Опция 1

Звонок where.exeс добавочного номера. (Это удобный способ обойти другие проблемы определения приоритетов и псевдонимов.)

PS C:\> where.exe where
C:\Windows\System32\where.exe

Вариант 2

Удалить псевдоним.

PS C:\> Remove-Item alias:\where -Force
PS C:\> where where
C:\Windows\System32\where.exe

Примечания стороны

Ответ Здана предлагает использовать Get-Commandв качестве альтернативы. Хотя он немного более многословен (даже при использовании gcmпсевдонима по умолчанию ), он обладает более широкими функциональными возможностями, чем where.exe. Если используется в сценариях, обратите внимание на тонкие различия между ними. Например, where.exeвозвращает все совпадения, тогда как Get-Commandвозвращает только первый результат, если вы не включите необязательный -TotalCountпараметр.

PS C:\> where.exe notepad
C:\Windows\System32\notepad.exe
C:\Windows\notepad.exe
PS C:\> (gcm notepad).Path
C:\WINDOWS\system32\notepad.exe
PS C:\> (gcm notepad -TotalCount 5).Path
C:\WINDOWS\system32\notepad.exe
C:\WINDOWS\notepad.exe
PS C:\>

И наконец, если вы удалите whereпсевдоним по умолчанию , вы также можете рассмотреть возможность переназначения этого псевдонима Get-Command. (Но это, вероятно, будет иметь сомнительную выгоду.)

PS C:\> Set-Alias where Get-Command
PS C:\> where notepad

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Application     notepad.exe                                        10.0.15... C:\WINDOWS\system32\notepad.exe


PS C:\> (where notepad).Path
C:\WINDOWS\system32\notepad.exe
PS C:\>
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.