PowerShell è equivalente al comando `which` di Unix?


62

PowerShell ha un equivalente al which comando trovato nella maggior parte (se non tutte) delle shell Unix?

Ci sono un certo numero di volte in cui mi piacerebbe conoscere la posizione di qualcosa che sto correndo dalla riga di comando. In Unix lo faccio e basta which <command>e mi dice Non riesco a trovare un equivalente in PowerShell.

Risposte:


63

Questo è stato chiesto e ha risposto su Stack Overflow: Equivalente del comando * Nix 'which' in PowerShell?

Il primo alias che ho creato dopo aver iniziato a personalizzare il mio profilo in PowerShell era "which".

New-Alias ​​che get-command

Per aggiungere questo al tuo profilo, digita questo:

"` nNew-Alias ​​che get-command "| aggiungi-contenuto $ profilo

Il `n all'inizio dell'ultima riga serve a garantire che inizi come una nuova riga.


Esattamente quello che stavo cercando. Grazie!
Herms

29

A partire da PowerShell 3.0, puoi farlo

(Get-Command cmd).Path

Che ha anche il vantaggio su Vanilla Get-Command di restituire a System.String in modo da ottenere un output * nixy single line pulito come potresti essere abituato. Usando l'alias gcm, possiamo portarlo a 11 caratteri.

(gcm cmd).Path

3
Se Get-Command trova più risultati, restituisce un array. Inoltre, se il comando che trova non è un eseguibile, Path non è definito ( $null ). Ciò rende la risposta qui poco pratica per un uso generale senza modifiche pesanti. Per un buon esempio di entrambi questi casi, prova Get-Command where.
jpmc26

Questa dovrebbe essere la risposta accettata in quanto in realtà ti dice qual è l'equivalente di Powershell del comando * NIX where piuttosto che insegnarti come impostare alias su Powershell, che non è il titolo della domanda.
mastazi

1
@mastazi: Ma questo fallisce per i builtin, che è una regressione rispetto ad es. zsh 'S which. ( where, a proposito, è in realtà un finestre utilità che può fare una serie di cose diverse, una delle quali approssimativamente si avvicina alla ricerca di un comando lungo il PATH.) Inoltre, c'è Niente sbagliato con una risposta che spiega come fare ciò che è stato chiesto e anche un'altra cosa, leggermente più coinvolta, costruita su quello.
SamB

6

Anche risposto nel 2008: Esiste un equivalente di "which" sulla riga di comando di Windows?

Prova il where comando se hai installato un Resource Kit.

Le parti più importanti della risposta:

Windows Server 2003 e versioni successive forniscono WHERE comando che fa   alcuni di ciò che fa, anche se corrisponde a tutti i tipi di file, no   solo comandi eseguibili.

[Omissis]

In Windows PowerShell è necessario digitare where.exe.


3
function which([string]$cmd) {gcm -ErrorAction "SilentlyContinue" $cmd | ft Definition}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.