Wie frage ich PowerShell, wo sich etwas befindet?
Beispiel: "welcher Notizblock" und es wird das Verzeichnis zurückgegeben, in dem die Datei notepad.exe gemäß den aktuellen Pfaden ausgeführt wird.
unix
powershell
command
Entwicklung von Chris
quelle
quelle
Get-Command <command> | Format-Table Path, Name
damit ich den Pfad bekomme, auf dem sich auch der Befehl befindet.select -expandproperty Path
.(gcm <command>).definition
diese Option , um nur die Pfade abzurufen.gcm
ist der Standardalias fürGet-Command
. Sie können auch Platzhalter verwenden, z(gcm win*.exe).definition
.Hier ist ein tatsächliches * nix-Äquivalent, dh es gibt eine Ausgabe im * nix-Stil.
Ersetzen Sie einfach durch das, was Sie suchen.
Wenn Sie es Ihrem Profil hinzufügen, möchten Sie eine Funktion anstelle eines Alias verwenden, da Sie keine Aliase mit Pipes verwenden können:
Wenn Sie jetzt Ihr Profil neu laden, können Sie Folgendes tun:
quelle
okta
, der auf ein Powershell-Skript mit dem Namen verweist,okta.ps1
das sich nicht in meinem befindet$PATH
. Bei Verwendung der akzeptierten Antwort wird der Skriptname (okta -> okta.ps1
) zurückgegeben. Dies ist in Ordnung, aber es sagt mir nicht den Standort vonokta.ps1
. Die Verwendung dieser Antwort gibt mir jedoch den gesamten Pfad (C:\Users\blah\etc\scripts\okta.ps1
). Also +1 von mir.Normalerweise tippe ich einfach:
oder
gcm ist der Standardalias für Get-Command.
Auf meinem System gibt gcm note * Folgendes aus:
Sie erhalten das Verzeichnis und den Befehl, die dem entsprechen, wonach Sie suchen.
quelle
gcm note* | select CommandType, Name, Definition
. Wenn Sie es häufig ausführen, sollten Sie es wahrscheinlich in eine Funktion einschließen.Versuchen Sie dieses Beispiel:
quelle
(gcm py.exe).path
Mein Vorschlag für die Welche Funktion:
quelle
Eine schnelle und schmutzige Übereinstimmung mit Unix
which
istEs werden jedoch mehrere Zeilen zurückgegeben, wenn sie vorhanden sind
quelle
where.exe where
sollte Ihnen sagenC:\Windows\System32\where.exe
where.exe
ist gleichbedeutend mitwhich -a
, da alle übereinstimmenden ausführbaren Dateien zurückgegeben werden, nicht nur die erste, die ausgeführt wird. Das heißt,where.exe notepad
gibtc:\windows\notepad.exe
undc:\windows\system32\notepad.exe
. Das ist also besonders für die Form nicht geeignet$(which command)
. (Ein weiteres Problem ist, dass eine nette, hilfreiche Fehlermeldung ausgegeben wird, wenn der Befehl nicht gefunden wird, die auch nicht gut erweitert wird$()
- das kann behoben werden/Q
, aber nicht als Alias.)where
anscheinend die System-PATH-Variable und nicht die aktuelle Shell-PATH-Variable durchsucht wird. Siehe diese FrageDies scheint zu tun, was Sie wollen (ich fand es auf http://huddledmasses.org/powershell-find-path/ ):
quelle
Überprüfen Sie diese PowerShell Welche .
Der dort bereitgestellte Code schlägt Folgendes vor:
quelle
Ich mag
Get-Command | Format-List
oder kürzer, Aliase für die beiden zu verwenden und nur fürpowershell.exe
:Sie können Aliase wie diese finden:
Die Tab-Vervollständigung funktioniert mit
gcm
.quelle
Probieren Sie die
where
Befehl unter Windows 2003 oder höher (oder Windows 2000 / XP, wenn Sie ein Resource Kit installiert haben).Übrigens erhielt dies mehr Antworten in anderen Fragen:
Gibt es ein Äquivalent zu 'which' unter Windows?
PowerShell entspricht dem Unix-
which
Befehl?quelle
where
Aliase für dasWhere-Object
Commandlet in Powershell. Wenn Sie alsowhere <item>
eine Powershell-Eingabeaufforderung eingeben, erhalten Sie nichts. Diese Antwort ist daher völlig falsch - wie in der akzeptierten Antwort in der ersten verknüpften Frage angegeben,where
müssen Sie eingeben , um das DOS zu erhaltenwhere.exe <item>
.Ich habe diese
which
erweiterte Funktion in meinem PowerShell-Profil:quelle
Verwenden:
Oder diese Version, die den ursprünglichen where-Befehl aufruft.
Diese Version funktioniert auch besser, da sie nicht auf Fledermausdateien beschränkt ist:
quelle
Wenn Sie ein Kommando wünschen, das sowohl Eingaben aus der Pipeline als auch als Parameter akzeptiert, sollten Sie Folgendes versuchen:
Kopieren Sie den Befehl und fügen Sie ihn in Ihr Profil ein (
notepad $profile
).Beispiele:
quelle