Entspricht dem "Wo" von cmd in Powershell

Antworten:

59

Get-CommandÜbergeben Sie dem Commandlet den Namen der ausführbaren Datei. Es füllt die Path-Eigenschaft des zurückgegebenen Objekts (vom Typ ApplicationInfo ) mit dem vollständig aufgelösten Pfad zur ausführbaren Datei.

# ~> (get-command notepad.exe).Path
C:\WINDOWS\system32\notepad.exe
zdan
quelle
8
Wenn Sie feststellen, dass Sie dies häufig verwenden, können Sie den Befehl abkürzen, gcmanstatt Get-Commandjedes Mal das ganze Wort einzugeben
Moshe Katz,
@ MosheKatz Vielen Dank! gcm notepadhat für mich perfekt funktioniert, wenn ich nur sehen möchte, welche Datei ich anrufe.
Shawn Wang
1
Und so, Jungs und Mädels, verkomplizieren Sie nützliche Dinge, die schon richtig waren. Wenn es nicht kaputt ist, reparieren Sie es nicht.
AFP_555,
Vielen Dank für diesen Befehl. Ich kann Add-Type hinzufügen, ohne den Pfad fest zu codieren.
Jason TEPOORTEN
22

Wenn Sie nur die gleiche Funktionalität haben where.exemöchten, ohne cmd aufzurufen, können Sie von Powershell aus anrufen, solange C:\Windows\System32sich dies in Ihrem Pfad befindet. Der Befehl where(ohne .exe) ist mit einem Alias ​​versehen. Geben Sie Where-Objecteinfach den vollständigen Namen an.

PS C:\Users\alec> where
cmdlet Where-Object at command pipeline position 1
...

PS C:\Users\alec> where.exe
The syntax of this command is:

WHERE [/R dir] [/Q] [/F] [/T] pattern...
moppled
quelle
8

Get-ChildItem C:\SomeDir -Recurse *.dll

Das ist so ziemlich das, was die alte where.exe macht ... gab es spezifischere Funktionen, die Sie nachahmen möchten?

Edit: Als Antwort auf Joshuas Kommentar ... oh, möchten Sie auch Ihre PATH-Umgebungsvariablen durchsuchen? Kein Problem.

Foreach($_ In $Env:Path -Split ';')
{
    Get-ChildItem $_ -Recurse *.dll
}
Ryan Ries
quelle
1
"where" durchsucht auch den PATH
Joshua McKinnon
3
oh, you want to search your PATH environment variables too? Äh, ja, das ist der springende Punkt zu where, sonst kann man nur verwenden dir. Der. :-P
Synetech,
3

whereist kein eingebauter cmdBefehl. Es ist eine eigenständige Anwendung ( where.exe), sodass PowerShell streng genommen keinen "Ersatz" benötigt.

Warum funktioniert das wherein PowerShell nicht? Es scheint nichts zu tun:

PS C:\> where where
PS C:\>

Standardmäßig whereist ein Alias ​​für ein integriertes PS-Cmdlet festgelegt.

PS C:\> get-help where

NAME
    Where-Object
...
ALIASES
    where
    ?

Gut, das ist gut zu wissen, aber gibt es eine Möglichkeit, Anrufe zu vermeiden, where-objectwenn Sie versuchen anzurufen where.exe?

Die Antwort ist ja.

Option 1

where.exeMit Nebenstelle anrufen . (Dies ist eine praktische Möglichkeit, um andere Probleme mit Aliasing und Priorisierung von Dateierweiterungen zu umgehen.)

PS C:\> where.exe where
C:\Windows\System32\where.exe

Option 2

Entfernen Sie den Alias.

PS C:\> Remove-Item alias:\where -Force
PS C:\> where where
C:\Windows\System32\where.exe

Randnotizen

Die Antwort von zdan schlägt vor, Get-Commandals Alternative zu verwenden. Obwohl es etwas ausführlicher ist (auch wenn der Standardalias verwendet wird gcm), bietet es eine umfassendere Funktionalität als where.exe. Achten Sie bei der Skripterstellung auf die feinen Unterschiede zwischen den beiden. ZB where.exegibt alle Übereinstimmungen zurück, während Get-Commandnur das erste Ergebnis zurückgegeben wird, sofern Sie nicht den optionalen -TotalCountParameter angeben.

PS C:\> where.exe notepad
C:\Windows\System32\notepad.exe
C:\Windows\notepad.exe
PS C:\> (gcm notepad).Path
C:\WINDOWS\system32\notepad.exe
PS C:\> (gcm notepad -TotalCount 5).Path
C:\WINDOWS\system32\notepad.exe
C:\WINDOWS\notepad.exe
PS C:\>

Und schließlich, wenn Sie den Standardalias entfernen where, können Sie diesen auch als Alias ​​zuweisen Get-Command. (Aber das wäre wahrscheinlich von zweifelhaftem Nutzen.)

PS C:\> Set-Alias where Get-Command
PS C:\> where notepad

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Application     notepad.exe                                        10.0.15... C:\WINDOWS\system32\notepad.exe


PS C:\> (where notepad).Path
C:\WINDOWS\system32\notepad.exe
PS C:\>
Desillusioniert
quelle