Unter PowerShell, Get-Command
findet ausführbare Dateien überall in $Env:PATH
.
$ Get-Command eventvwr
CommandType Name Definition
----------- ---- ----------
Application eventvwr.exe c:\windows\system32\eventvwr.exe
Application eventvwr.msc c:\windows\system32\eventvwr.msc
Und da man in der Powershell Aliase definieren kann, which
kann folgendermaßen definiert werden.
$ sal which gcm # short form of `Set-Alias which Get-Command`
$ which foo
...
PowerShell Befehle sind nicht nur ausführbare Dateien ( .exe
, .ps1
usw.). Sie können auch Cmdlets, Funktionen, Aliase, benutzerdefinierte ausführbare Suffixe sein, die in $Env:PATHEXT
, usw. Get-Command
ist in der Lage, alle diese Befehle zu finden und aufzulisten (ähnlich wie Bashs type -a foo
). Dies allein macht es besser als where.exe
, which.exe
usw., die in der Regel darauf beschränkt sind, nur ausführbare Dateien zu finden.
Suche nach ausführbaren Dateien, die nur einen Teil des Namens enthalten
$ gcm *disk*
CommandType Name Version Source
----------- ---- ------- ------
Alias Disable-PhysicalDiskIndication 2.0.0.0 Storage
Alias Enable-PhysicalDiskIndication 2.0.0.0 Storage
Function Add-PhysicalDisk 2.0.0.0 Storage
Function Add-VirtualDiskToMaskingSet 2.0.0.0 Storage
Function Clear-Disk 2.0.0.0 Storage
Cmdlet Get-PmemDisk 1.0.0.0 PersistentMemory
Cmdlet New-PmemDisk 1.0.0.0 PersistentMemory
Cmdlet Remove-PmemDisk 1.0.0.0 PersistentMemory
Application diskmgmt.msc 0.0.0.0 C:\WINDOWS\system32\diskmgmt.msc
Application diskpart.exe 10.0.17... C:\WINDOWS\system32\diskpart.exe
Application diskperf.exe 10.0.17... C:\WINDOWS\system32\diskperf.exe
Application diskraid.exe 10.0.17... C:\WINDOWS\system32\diskraid.exe
...
Suche nach benutzerdefinierten ausführbaren Dateien
Im Gegensatz zu UNIX, wo ausführbare Dateien mit der Bezeichnung "executable" ( +x
) gesetzt ist, sind ausführbare Dateien unter Windows Dateien, die sich in einem der Verzeichnisse befinden, die in der Datei $PATH
Umgebungsvariable, deren Dateinamensuffixe in der $PATHEXT
Umgebungsvariable (Standardwert ist .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.CPL
).
Als Get-Command
auch diese Umgebungsvariable beachtet, kann es erweitert werden, um benutzerdefinierte ausführbare Dateien aufzulisten. z.B.
$ $Env:PATHEXT="$Env:PATHEXT;.dll;.ps1;.psm1;.py" # temporary assignment, only for this shell's process
$ gcm user32,kernel32,*WASM*,*http*py
CommandType Name Version Source
----------- ---- ------- ------
ExternalScript Invoke-WASMProfiler.ps1 C:\WINDOWS\System32\WindowsPowerShell\v1.0\Invoke-WASMProfiler.ps1
Application http-server.py 0.0.0.0 C:\Users\ME\AppData\Local\Microsoft\WindowsApps\http-server.py
Application kernel32.dll 10.0.17... C:\WINDOWS\system32\kernel32.dll
Application user32.dll 10.0.17... C:\WINDOWS\system32\user32.dll
Siehe Get-Command
für weitere Optionen und Beispiele.
0 Stimmen
Was bedeutet "welches" unter Unix?
3 Stimmen
Foredecker: "which" sucht im PATH nach der ausführbaren Datei, die ausgeführt wird, wenn Sie an der Shell-Eingabeaufforderung einen Befehl eingeben.
3 Stimmen
Wenn Sie z.B. 5 Versionen von Java installiert haben und nicht wissen, welche verwendet wird, können Sie "which java" eingeben und Sie erhalten den PATH zum Binary
11 Stimmen
@Foredecker, MR sagt, es ist "wo" in Win2k3, aber Win2k3 war nicht Teil der Frage. Wenn "wo" nicht in den anderen Windows-Versionen ist, sind auch andere Antworten gültig. IMNSHO ist die Antwort, die bei allen Windows-Versionen funktioniert, die beste. Auch die anderen Antworten sind nicht falsch, sie sind nur anders formuliert.
43 Stimmen
Ich weiß, dass diese Frage vor SuperUser aufkam, aber sie gehört wahrscheinlich dorthin.
0 Stimmen
Sie können eine Batch-Datei mit nur 90 Bytes von hier aus erstellen: blogs.msdn.com/b/oldnewthing/archive/2005/01/20/357225.aspx Oder führen Sie ein C#-Programm aus - ein Link befindet sich auf der obigen Website.
0 Stimmen
Ich fand diese Batch-Datei sehr praktisch pankaj-k.net/weblog/2004/11/gleichwertiges_von_welchem_in_windows.html
0 Stimmen
Diese Frage wurde in anderen Threads gestellt: [Äquivalent zum *Nix-Befehl 'which' in Powershell?][1] [Powershell-Äquivalent zu Unix
which
Befehl?][2] [1]: stackoverflow.com/questions/63805/ [2]: superuser.com/questions/34492/26 Stimmen
Es gibt keine
which
Befehl in Standard-Unix. Das POSIX-Dienstprogramm isttype
. Die C-Shell verfügt über den Befehl which, und auf einigen Systemen ist er als externe ausführbare Datei verfügbar. Zum Beispiel unter Debian Linux,which
stammt aus einem Paket namensdebutils
. Diese externewhich
sieht" keine Shell-Build-Ins, Aliase oder Funktionen.type
tut; Bash'stype
hat eine Option, um dies zu unterdrücken und nur eine Pfadsuche durchzuführen.0 Stimmen
Zur Veranschaulichung von @kaz' Standpunkt vergleichen Sie die Ausgaben von
which -a pwd
gegentype -a pwd