Jak zapytać PowerShell, gdzie coś jest?
Na przykład „Który notatnik” i zwraca katalog, z którego uruchamiany jest notepad.exe zgodnie z bieżącymi ścieżkami.
unix
powershell
command
DevelopisChris
źródło
źródło
Get-Command <command> | Format-Table Path, Name
więc mogę uzyskać ścieżkę, w której znajduje się również polecenie.select -expandproperty Path
.(gcm <command>).definition
aby uzyskać tylko ścieżki.gcm
jest domyślnym aliasem dlaGet-Command
. Możesz także użyć symboli wieloznacznych, np(gcm win*.exe).definition
. : .Oto rzeczywisty odpowiednik * nix, tzn. Daje wynik w stylu * nix.
Po prostu zamień na wszystko, czego szukasz.
Kiedy dodasz go do swojego profilu, będziesz chciał użyć funkcji zamiast aliasu, ponieważ nie możesz używać aliasów z potokami:
Teraz, gdy ponownie załadujesz swój profil, możesz to zrobić:
źródło
okta
który wskazuje na skrypt Powershell,okta.ps1
którego nie ma na moim$PATH
. Użycie zaakceptowanej odpowiedzi zwraca nazwę skryptu (okta -> okta.ps1
). To jest OK, ale nie mówi mi o lokalizacjiokta.ps1
. Użycie tej odpowiedzi daje mi jednak całą ścieżkę (C:\Users\blah\etc\scripts\okta.ps1
). Więc +1 ode mnie.Zwykle piszę:
lub
gcm jest domyślnym aliasem Get-Command.
W moim systemie gcm note * wyświetla:
Otrzymasz katalog i polecenie pasujące do tego, czego szukasz.
źródło
gcm note* | select CommandType, Name, Definition
. Jeśli często go uruchamiasz, prawdopodobnie powinieneś zawinąć go w funkcję.Spróbuj tego przykładu:
źródło
(gcm py.exe).path
Moja propozycja dla funkcji Które:
źródło
Szybkie i brudne dopasowanie do Uniksa
which
toAle zwraca wiele wierszy, jeśli one istnieją, więc się staje
źródło
where.exe where
powinienem powiedziećC:\Windows\System32\where.exe
where.exe
jest równoważnewhich -a
, ponieważ zwróci wszystkie pasujące pliki wykonywalne, a nie tylko pierwszy do wykonania. To znaczywhere.exe notepad
dajec:\windows\notepad.exe
ic:\windows\system32\notepad.exe
. Więc jest to szczególnie nie nadaje się do postaci$(which command)
. (Innym problemem jest to, że wydrukuje miły, pomocny komunikat o błędzie, jeśli polecenie nie zostanie znalezione, które również nie będzie ładnie się rozwijało$()
- co można naprawić/Q
, ale nie jako alias.)where
wydaje się , że szuka systemowej zmiennej PATH, a nie bieżącej zmiennej PATH powłoki. Zobacz to pytanieWydaje się, że robi to, co chcesz (znalazłem to na http://huddledmasses.org/powershell-find-path/ ):
źródło
Sprawdź to PowerShell . Które .
Podany tam kod sugeruje to:
źródło
Lubię
Get-Command | Format-List
lub krócej używam aliasów dla dwóch i tylko dlapowershell.exe
:Możesz znaleźć takie aliasy:
Uzupełnianie tabulatorów działa z
gcm
.źródło
Spróbuj
where
polecenie w systemie Windows 2003 lub nowszym (lub Windows 2000 / XP, jeśli zainstalowano zestaw zasobów).BTW, otrzymałem więcej odpowiedzi na inne pytania:
Czy istnieje odpowiednik „który” w systemie Windows?
PowerShell równoważny z
which
poleceniem Unix ?źródło
where
aliasy doWhere-Object
komendywhere <item>
w Powershell, więc wpisanie monitu Powershell nic nie da. Ta odpowiedź jest więc całkowicie niepoprawna - jak zauważono w zaakceptowanej odpowiedzi w pierwszym łączonym pytaniu, aby uzyskać DOSwhere
, musisz wpisaćwhere.exe <item>
.Mam tę
which
zaawansowaną funkcję w moim profilu PowerShell:źródło
Posługiwać się:
Lub ta wersja, wywołując oryginalne polecenie where.
Ta wersja działa również lepiej, ponieważ nie ogranicza się do plików nietoperzy:
źródło
Jeśli chcesz comamnd, który akceptuje dane wejściowe z potoku lub jako parametr, powinieneś spróbować:
skopiuj i wklej polecenie do swojego profilu (
notepad $profile
).Przykłady:
źródło