PowerShell równoważny z uniksowym poleceniem „Który”?

69

Czy PowerShell ma odpowiednik whichpolecenia występującego w większości (jeśli nie wszystkich) powłokach uniksowych?

Wiele razy chciałbym poznać lokalizację czegoś, co uruchamiam z wiersza poleceń. W Uniksie po prostu to robię which <command>i to mi mówi. Nie mogę znaleźć odpowiednika w PowerShell.

Herms
źródło

Odpowiedzi:

71

To pytanie zostało zadane i udzielono odpowiedzi na przepełnienie stosu: odpowiednik * Nix ', które polecenie w PowerShell?

Pierwszym pseudonimem, który utworzyłem, kiedy zacząłem dostosowywać swój profil w PowerShell, było „które”.

Nowy alias, który dostaje polecenie

Aby dodać to do swojego profilu, wpisz:

"` nNowy Alias, który dostaje polecenie "| profil add-content $

`N na początku ostatniej linii oznacza, że ​​zacznie się jako nowa linia.

nagul
źródło
35

Począwszy od PowerShell 3.0, możesz to zrobić

(Get-Command cmd).Path

Ma to również tę System.Stringprzewagę nad waniliowym Get-Command, że zwraca a, dzięki czemu otrzymujesz czyste * jednokreskowe wyjście, tak jak zwykle. Używając aliasu gcm, możemy sprowadzić go do 11 znaków.

(gcm cmd).Path
FLGMwt
źródło
4
Jeśli Get-Commandznajdzie wiele wyników, zwraca tablicę. Ponadto, jeśli znalezione polecenie nie jest plikiem wykonywalnym, Pathjest niezdefiniowane ( $null). To sprawia, że ​​odpowiedź tutaj jest niepraktyczna do ogólnego użytku bez ciężkich modyfikacji. Aby uzyskać dobry przykład obu tych przypadków, spróbuj Get-Command where.
jpmc26
1
To powinna być zaakceptowana odpowiedź, ponieważ mówi ona, co to jest odpowiednik Powershell polecenia * NIX, wherezamiast uczyć, jak ustawiać aliasy w Powershell, który nie jest tytułem pytania.
mastazi
3
@mastazi: Ale to nie dla builtins, który jest regres w porównaniu do np zsh „s which. ( wherenawiasem mówiąc, to tak naprawdę narzędzie systemu Windows , które może wykonywać wiele różnych rzeczy, z których jedna w przybliżeniu przybliża wyszukiwanie polecenia wzdłuż PATH.) Ponadto, nie ma nic złego w odpowiedzi, która wyjaśnia, jak zrobić to, o co pytano, i także inna, nieco bardziej zaangażowana rzecz oparta na tym.
SamB
7

Odpowiedział także w 2008 roku: Czy w linii poleceń systemu Windows istnieje odpowiednik „które”?

Spróbuj wherewykonać polecenie, jeśli zainstalowałeś zestaw zasobów.

Najważniejsze części odpowiedzi:

Windows Server 2003 i nowsze wersje udostępniają WHEREpolecenie, które wykonuje niektóre czynności, chociaż pasuje do wszystkich typów plików, a nie tylko poleceń wykonywalnych.

[fantastyczna okazja]

W Windows PowerShell musisz wpisać where.exe.

Anonimowy
źródło
3
function which([string]$cmd) {gcm -ErrorAction "SilentlyContinue" $cmd | ft Definition}
hshen
źródło