Parece que no puedo encontrar nada sobre un Powershell equivalente al wherecomando de cmd. ¿Debo llamarlo cmdo hay algo más elegante en PS?
Parece que no puedo encontrar nada sobre un Powershell equivalente al wherecomando de cmd. ¿Debo llamarlo cmdo hay algo más elegante en PS?
Respuestas:
Use el Get-Commandcomando pasando el nombre del ejecutable. Rellena la propiedad Path del objeto devuelto (de tipo ApplicationInfo ) con la ruta completamente resuelta al ejecutable.
# ~> (get-command notepad.exe).Path
C:\WINDOWS\system32\notepad.exe
gcmlugar de escribir la Get-Commandpalabra completa cada vez
gcm notepadha funcionado perfectamente para mí cuando solo quiero ver a qué archivo estoy llamando.
Si solo busca tener la misma funcionalidad sin invocar cmd, puede llamar where.exedesde powershell, siempre que C:\Windows\System32esté en su camino. El comando where(sin el .exe) tiene un alias Where-Object, así que solo especifique el nombre completo.
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
Eso es más o menos lo que hace el viejo where.exe ... ¿había una funcionalidad más específica que intentas imitar?
Editar: En respuesta al comentario de Joshua ... oh, ¿también quieres buscar en tus variables de entorno PATH? No hay problema.
Foreach($_ In $Env:Path -Split ';')
{
Get-ChildItem $_ -Recurse *.dll
}
oh, you want to search your PATH environment variables too? Um, sí, ese es el punto entero que where, de lo contrario sólo se puede utilizar dir. Der. :-P
whereNo es un cmdcomando incorporado . Es una aplicación independiente ( where.exe), por lo que, estrictamente hablando, PowerShell no "necesita un reemplazo".
Entonces, ¿por qué no wherefunciona en PowerShell? Parece no hacer nada:
PS C:\> where where
PS C:\>
De forma predeterminada, wheretiene un alias para un cmdlet PS incorporado.
PS C:\> get-help where
NAME
Where-Object
...
ALIASES
where
?
Bueno, es bueno saberlo, pero ¿hay alguna manera de evitar llamar where-objectcuando intentas llamar where.exe?
La respuesta es sí.
Opción 1
Llamada where.execon extensión. (Esta es una forma práctica de solucionar otros problemas de alias y de priorización de extensiones de archivo).
PS C:\> where.exe where
C:\Windows\System32\where.exe
opcion 2
Elimina el alias.
PS C:\> Remove-Item alias:\where -Force
PS C:\> where where
C:\Windows\System32\where.exe
Notas al margen
La respuesta de zdan propone usar Get-Commandcomo alternativa. Aunque es un poco más detallado (incluso cuando se usa el gcmalias predeterminado ), tiene una funcionalidad más rica que where.exe. Si se usa en secuencias de comandos, preste atención a las sutiles diferencias entre los dos. Por ejemplo, where.exedevuelve todas las coincidencias, mientras que Get-Commandsolo devuelve el primer resultado a menos que incluya el -TotalCountparámetro opcional .
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:\>
Y finalmente, si elimina el wherealias predeterminado , también podría considerar reasignarlo como un alias Get-Command. (Pero esto probablemente sería de dudoso beneficio).
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:\>