我似乎找不到关于Powershell的where
命令的任何信息cmd
。我应该从cmd
PS中调用它还是PS中有更优雅的东西?
我似乎找不到关于Powershell的where
命令的任何信息cmd
。我应该从cmd
PS中调用它还是PS中有更优雅的东西?
Answers:
使用Get-Command
命令行开关传递可执行文件的名称。它将使用完全解析的可执行文件路径填充返回的对象(ApplicationInfo类型)的Path属性。
# ~> (get-command notepad.exe).Path
C:\WINDOWS\system32\notepad.exe
gcm
而不是Get-Command
每次都键入整个单词
gcm notepad
当我只想查看要调用的文件时,对我来说一直很完美。
如果您只是想拥有相同的功能而无需调用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...
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 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:\>