Я, здається, не можу знайти нічого про еквівалент Powershell з whereкоманди cmd. Чи варто мені просто зателефонувати йому cmdчи є в PS щось більш елегантне?
Я, здається, не можу знайти нічого про еквівалент Powershell з whereкоманди cmd. Чи варто мені просто зателефонувати йому cmdчи є в PS щось більш елегантне?
Відповіді:
Використовуйте Get-Commandкомандлет, передаючи йому ім'я виконуваного файлу. Він заповнює властивість Path повернутого об'єкта (типу ApplicationInfo ) повністю розв'язаним шляхом до виконуваного файлу.
# ~> (get-command notepad.exe).Path
C:\WINDOWS\system32\notepad.exe
gcmа не вводити це Get-Commandслово кожного разу
gcm notepadпрацює для мене ідеально, коли я просто хочу побачити, в який файл я дзвоню.
Якщо ви просто шукаєте, щоб мати однаковий функціонал, не викликаючи 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...
Get-ChildItem C:\SomeDir -Recurse *.dll
Це майже те, що робить старий where.exe ... чи була більш конкретна функціональність, яку ви намагаєтесь імітувати?
Редагувати: У відповідь на коментар Джошуа ... о, ви також хочете шукати ваші змінні середовища PATH? Нема проблем.
Foreach($_ In $Env:Path -Split ';')
{
Get-ChildItem $_ -Recurse *.dll
}
oh, you want to search your PATH environment variables too? Хм, так, це весь сенс в whereіншому випадку ви можете просто використовувати dir. Дер. :-P
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:\>