Еквівалентний "де" cmd в оболонці


61

Я, здається, не можу знайти нічого про еквівалент 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слово кожного разу
Moshe Katz

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

1
І це, хлопці та дівчата, - як ви надмірно ускладнюєте корисні речі, які вже були правильні. Якщо вона не зламана, не виправляйте її.
AFP_555

Дуже дякую за цю команду. Я можу додавати-тип без жорсткого кодування шляху.
Джейсон ТЕПОРОТЕН

22

Якщо ви просто шукаєте, щоб мати однаковий функціонал, не викликаючи cmd, ви можете зателефонувати where.exeз powerhell, поки це 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

3

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

Бічні примітки

Відповідь zdan пропонує використовувати 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.