¿Cómo le pregunto a PowerShell dónde está algo?
Por ejemplo, "qué bloc de notas" y devuelve el directorio desde donde se ejecuta notepad.exe de acuerdo con las rutas actuales.
unix
powershell
command
Chris en desarrollo
fuente
fuente
Get-Command <command> | Format-Table Path, Name
así puedo obtener la ruta donde también se encuentra el comando.select -expandproperty Path
.(gcm <command>).definition
para obtener solo las rutas.gcm
es el alias predeterminado paraGet-Command
. También puede utilizar comodines, por ejemplo:(gcm win*.exe).definition
.Aquí hay un equivalente real * nix, es decir, proporciona una salida de estilo * nix.
Simplemente reemplácelo con lo que esté buscando.
Cuando lo agregue a su perfil, querrá usar una función en lugar de un alias porque no puede usar alias con tuberías:
Ahora, cuando vuelva a cargar su perfil, puede hacer esto:
fuente
okta
que apunta a un script de Powershell llamadookta.ps1
que no está en mi$PATH
. El uso de la respuesta aceptada devuelve el nombre del script (okta -> okta.ps1
). Esto está bien pero no me dice la ubicación deokta.ps1
. Sin embargo, usar esta respuesta me da todo el camino (C:\Users\blah\etc\scripts\okta.ps1
). Entonces +1 de mi parte.Usualmente solo escribo:
o
gcm es el alias predeterminado para Get-Command.
En mi sistema, gcm note * salidas:
Obtiene el directorio y el comando que coincide con lo que está buscando.
fuente
gcm note* | select CommandType, Name, Definition
. Sin embargo, si lo ejecuta a menudo, probablemente debería envolverlo en una función.Prueba este ejemplo:
fuente
(gcm py.exe).path
Mi propuesta para la función Which:
fuente
Un partido rápido y sucio con Unix
which
esPero devuelve varias líneas si existen, entonces se convierte en
fuente
where.exe where
debería decirteC:\Windows\System32\where.exe
where.exe
es equivalente awhich -a
, ya que devolverá todos los ejecutables coincidentes, no solo el primero que se ejecutará. Es decir,where.exe notepad
dac:\windows\notepad.exe
yc:\windows\system32\notepad.exe
. Así que esto es particularmente no adecuado para la forma$(which command)
. (Otro problema es que imprimirá un mensaje de error agradable y útil si no se encuentra el comando, que tampoco se expandirá bien$()
, eso se puede remediar/Q
, pero no como un alias.)where
parece buscar la variable PATH del sistema y no la variable PATH del shell actual. Ver esta preguntaEsto parece hacer lo que quieres (lo encontré en http://huddledmasses.org/powershell-find-path/ ):
fuente
Comprueba este PowerShell que .
El código provisto allí sugiere esto:
fuente
Me gusta
Get-Command | Format-List
, o más corto, usar alias para los dos y solo parapowershell.exe
:Puedes encontrar alias como este:
La finalización de pestañas funciona con
gcm
.fuente
Pruebe el
where
comando en Windows 2003 o posterior (o Windows 2000 / XP si ha instalado un Kit de recursos).Por cierto, esto recibió más respuestas en otras preguntas:
¿Hay un equivalente de 'cual' en Windows?
¿PowerShell equivalente al
which
comando Unix ?fuente
where
alias alWhere-Object
comando en Powershell, por lo que escribirwhere <item>
en un indicador de Powershell no produce nada. Por lo tanto, esta respuesta es completamente incorrecta: como se señaló en la respuesta aceptada en la primera pregunta vinculada, para obtener el DOSwhere
, debe escribirwhere.exe <item>
.Tengo esta
which
función avanzada en mi perfil de PowerShell:fuente
Utilizar:
O esta versión, llamando al comando where original.
Esta versión también funciona mejor, porque no se limita a los archivos bat:
fuente
Si desea un comando que acepte la entrada de la tubería o como parámetro, debe intentar esto:
copie y pegue el comando en su perfil (
notepad $profile
).Ejemplos:
fuente