在Powershell中等效于cmd的“ where”


Answers:


59

使用Get-Command命令行开关传递可执行文件的名称。它将使用完全解析的可执行文件路径填充返回的对象(ApplicationInfo类型)的Path属性。

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

8
如果您发现自己经常使用此命令,则可以缩写命令,gcm而不是Get-Command每次都键入整个单词
Moshe Katz 2013年

@MosheKatz谢谢!gcm notepad当我只想查看要调用的文件时,对我来说一直很完美。
肖恩·王

1
这就是男孩和女孩,这就是您如何使本来就正确的有用事情变得过于复杂。如果没有损坏,请不要修复。
AFP_555 '18

非常感谢您的命令。我可以添加类型而无需对路径进行硬编码。
Jason 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 2013年

3

where不是内置cmd命令。它是一个独立的应用程序(where.exe),因此严格来讲PowerShell不需要“替换”。

那么,为什么where在PowerShell中不起作用?它似乎无能为力:

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

默认情况下where,别名是内置PS cmdlet。

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:\>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.