Setara dengan cmd "di mana" di PowerShell


Jawaban:


59

Gunakan Get-Commandcommandlet yang melewatinya nama yang dapat dieksekusi. Ini mengisi properti Path dari objek yang dikembalikan (dari tipe ApplicationInfo ) dengan jalur yang sepenuhnya diselesaikan ke executable.

# ~> (get-command notepad.exe).Path
C:\WINDOWS\system32\notepad.exe

8
Jika Anda mendapati diri Anda sering menggunakan ini, Anda dapat menyingkat perintah sebagai gcmganti mengetik seluruh Get-Commandkata setiap kali
Moshe Katz

@ MosheKatz Terima kasih! gcm notepadtelah bekerja sempurna untuk saya ketika saya hanya ingin melihat file mana yang saya panggil.
Shawn Wang

1
Dan ini, cowok dan cewek, adalah bagaimana Anda terlalu memperumit hal-hal berguna yang sudah benar. Jika tidak rusak, jangan memperbaikinya.
AFP_555

Terima kasih banyak atas perintah ini. Saya dapat Add-Type tanpa hardcoding jalan.
Jason TEPOORTEN

22

Jika Anda hanya ingin memiliki fungsi yang sama tanpa menggunakan cmd, Anda dapat menelepon where.exedari PowerShell, selama C:\Windows\System32ada di jalur Anda. Perintah where(tanpa .exe) adalah alias Where-Object, jadi tentukan saja nama lengkapnya.

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...

8

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

Itulah yang dilakukan where.exe lama ... apakah ada fungsi yang lebih spesifik yang ingin Anda tiru?

Sunting: Sebagai tanggapan terhadap komentar Joshua ... oh, Anda juga ingin mencari variabel lingkungan PATH Anda? Tidak masalah.

Foreach($_ In $Env:Path -Split ';')
{
    Get-ChildItem $_ -Recurse *.dll
}

1
"Di mana" juga mencari PATH juga
Joshua McKinnon

3
oh, you want to search your PATH environment variables too? Um, ya, itulah seluruh titik untuk where, jika tidak, anda bisa menggunakan dir. Der. :-P
Synetech

4

wherebukan cmdperintah bawaan. Ini adalah aplikasi mandiri ( where.exe), jadi PowerShell secara tegas tidak "membutuhkan pengganti".

Jadi mengapa tidak wherebekerja di PowerShell? Tampaknya tidak melakukan apa-apa:

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

Secara default wherealias ke cmdlet PS bawaan .

PS C:\> get-help where

NAME
    Where-Object
...
ALIASES
    where
    ?

Ya, itu bagus untuk diketahui, tetapi apakah ada cara untuk menghindari panggilan where-objectsaat mencoba menelepon where.exe?

Jawabannya iya.

Pilihan 1

Panggil where.exedengan ekstensi. (Ini adalah cara praktis untuk mengatasi masalah prioritas aliasing dan ekstensi file lainnya.)

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

pilihan 2

Hapus alias.

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

Catatan Samping

Jawaban zdan mengusulkan penggunaan Get-Commandsebagai alternatif. Meskipun sedikit lebih verbose (bahkan ketika menggunakan gcmalias default ), ia memiliki fungsi yang lebih kaya daripada where.exe. Jika digunakan dalam skrip, perhatikan perbedaan halus antara keduanya. Misalnya where.exemengembalikan semua kecocokan, sedangkan Get-Commandmengembalikan hanya hasil pertama kecuali Anda memasukkan -TotalCountparameter opsional .

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:\>

Dan akhirnya, jika Anda menghapus wherealias default , Anda mungkin juga mempertimbangkan untuk menetapkan kembali itu sebagai alias untuk Get-Command. (Tapi ini mungkin akan bermanfaat bagi yang meragukan.)

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:\>
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.