PowerShell entspricht dem Unix-Befehl `which`?

69

Entspricht PowerShell dem whichBefehl in den meisten (wenn nicht allen) Unix-Shells?

Ich möchte mehrmals wissen, wo sich etwas befindet, das über die Befehlszeile ausgeführt wird. In Unix mache ich einfach which <command>, und es sagt mir. Ich kann in PowerShell kein Äquivalent finden.

Herms
quelle

Antworten:

71

Dies wurde beim Stack Overflow gefragt und beantwortet: Entspricht dem Befehl * Nix 'which' in PowerShell?

Der allererste Alias, den ich erstellt habe, als ich anfing, mein Profil in PowerShell anzupassen, war 'which'.

New-Alias ​​der get-Befehl

Geben Sie Folgendes ein, um dies zu Ihrem Profil hinzuzufügen:

msgstr "` nNeues Alias ​​welches Befehl bekommt "| add-content $ profile

Das `n am Anfang der letzten Zeile soll sicherstellen, dass es als neue Zeile beginnt.

Nagul
quelle
35

Ab PowerShell 3.0 können Sie dies tun

(Get-Command cmd).Path

Das hat auch den Vorteil, dass Sie gegenüber vanilla Get-Command a zurückgeben, System.Stringsodass Sie eine saubere * nixy Ausgabe mit einer einzigen Zeile erhalten, wie Sie es vielleicht gewohnt sind. Mit dem gcm-Alias ​​können wir es auf 11 Zeichen reduzieren.

(gcm cmd).Path
FLGMwt
quelle
4
Wenn Get-Commandmehrere Ergebnisse gefunden werden, wird ein Array zurückgegeben. Wenn der gefundene Befehl keine ausführbare Datei ist, Pathist er außerdem undefined ( $null). Dies macht die Antwort hier für den allgemeinen Gebrauch ohne große Modifikationen unpraktisch. Versuchen Sie es mit einem guten Beispiel für beide Fälle Get-Command where.
jpmc26
1
Dies sollte die akzeptierte Antwort sein, da sie Ihnen tatsächlich sagt, was das Powershell-Äquivalent des * NIX-Befehls ist, whereanstatt Ihnen beizubringen, wie Sie Aliase in Powershell festlegen, was nicht der Titel der Frage ist.
Mastazi
3
@mastazi: Aber das nicht für builtins, die eine Regression im Vergleich zu zB zsh ist which. ( where, Nebenbei bemerkt , ist eigentlich ein Windows - Dienstprogramm , das eine Reihe von verschiedenen Dingen tun, von denen etwa annähert für einen Befehl der Suche entlang der PATH.) Außerdem gibt es nichts falsch mit einer Antwort , die erklärt , wie etwas zu tun ist gefragt wurde , und auch ein anderes, etwas komplizierteres Ding baute darauf auf.
SamB
7

Ebenfalls im Jahr 2008 beantwortet: Gibt es ein Äquivalent von 'which' in der Windows-Befehlszeile?

Versuchen Sie den whereBefehl, wenn Sie ein Resource Kit installiert haben.

Wichtigste Teile der Antwort:

Windows Server 2003 und höher stellen den WHEREBefehl bereit, der einige Funktionen ausführt, obwohl er mit allen Dateitypen und nicht nur mit ausführbaren Befehlen übereinstimmt.

[snip]

In Windows PowerShell müssen Sie Folgendes eingeben where.exe.

Anonym
quelle
3
function which([string]$cmd) {gcm -ErrorAction "SilentlyContinue" $cmd | ft Definition}
hshen
quelle