Ich kann anscheinend nichts über ein Powershell-Äquivalent des where
Befehls von finden cmd
. Soll ich es einfach anrufen cmd
oder gibt es etwas eleganteres in PS?
60
Ich kann anscheinend nichts über ein Powershell-Äquivalent des where
Befehls von finden cmd
. Soll ich es einfach anrufen cmd
oder gibt es etwas eleganteres in PS?
Antworten:
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.quelle
gcm
anstattGet-Command
jedes Mal das ganze Wort einzugebengcm notepad
hat für mich perfekt funktioniert, wenn ich nur sehen möchte, welche Datei ich anrufe.Wenn Sie nur die gleiche Funktionalität haben
where.exe
möchten, ohne cmd aufzurufen, können Sie von Powershell aus anrufen, solangeC:\Windows\System32
sich dies in Ihrem Pfad befindet. Der Befehlwhere
(ohne .exe) ist mit einem Alias versehen. Geben SieWhere-Object
einfach den vollständigen Namen an.quelle
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.
quelle
oh, you want to search your PATH environment variables too?
Äh, ja, das ist der springende Punkt zuwhere
, sonst kann man nur verwendendir
. Der.:-P
where
ist kein eingebautercmd
Befehl. Es ist eine eigenständige Anwendung (where.exe
), sodass PowerShell streng genommen keinen "Ersatz" benötigt.Warum funktioniert das
where
in PowerShell nicht? Es scheint nichts zu tun:Standardmäßig
where
ist ein Alias für ein integriertes PS-Cmdlet festgelegt.Gut, das ist gut zu wissen, aber gibt es eine Möglichkeit, Anrufe zu vermeiden,
where-object
wenn Sie versuchen anzurufenwhere.exe
?Die Antwort ist ja.
Option 1
where.exe
Mit Nebenstelle anrufen . (Dies ist eine praktische Möglichkeit, um andere Probleme mit Aliasing und Priorisierung von Dateierweiterungen zu umgehen.)Option 2
Entfernen Sie den Alias.
Randnotizen
Die Antwort von zdan schlägt vor,
Get-Command
als Alternative zu verwenden. Obwohl es etwas ausführlicher ist (auch wenn der Standardalias verwendet wirdgcm
), bietet es eine umfassendere Funktionalität alswhere.exe
. Achten Sie bei der Skripterstellung auf die feinen Unterschiede zwischen den beiden. ZBwhere.exe
gibt alle Übereinstimmungen zurück, währendGet-Command
nur das erste Ergebnis zurückgegeben wird, sofern Sie nicht den optionalen-TotalCount
Parameter angeben.Und schließlich, wenn Sie den Standardalias entfernen
where
, können Sie diesen auch als Alias zuweisenGet-Command
. (Aber das wäre wahrscheinlich von zweifelhaftem Nutzen.)quelle