Sepertinya saya tidak dapat menemukan apa pun tentang Powershell yang setara dengan where
perintah dari cmd
. Haruskah saya hanya menyebutnya dari cmd
atau ada sesuatu yang lebih elegan di PS?
Sepertinya saya tidak dapat menemukan apa pun tentang Powershell yang setara dengan where
perintah dari cmd
. Haruskah saya hanya menyebutnya dari cmd
atau ada sesuatu yang lebih elegan di PS?
Jawaban:
Gunakan Get-Command
commandlet 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
gcm
ganti mengetik seluruh Get-Command
kata setiap kali
gcm notepad
telah bekerja sempurna untuk saya ketika saya hanya ingin melihat file mana yang saya panggil.
Jika Anda hanya ingin memiliki fungsi yang sama tanpa menggunakan cmd, Anda dapat menelepon where.exe
dari PowerShell, selama C:\Windows\System32
ada 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...
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
}
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
where
bukan cmd
perintah bawaan. Ini adalah aplikasi mandiri ( where.exe
), jadi PowerShell secara tegas tidak "membutuhkan pengganti".
Jadi mengapa tidak where
bekerja di PowerShell? Tampaknya tidak melakukan apa-apa:
PS C:\> where where
PS C:\>
Secara default where
alias 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-object
saat mencoba menelepon where.exe
?
Jawabannya iya.
Pilihan 1
Panggil where.exe
dengan 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-Command
sebagai alternatif. Meskipun sedikit lebih verbose (bahkan ketika menggunakan gcm
alias default ), ia memiliki fungsi yang lebih kaya daripada where.exe
. Jika digunakan dalam skrip, perhatikan perbedaan halus antara keduanya. Misalnya where.exe
mengembalikan semua kecocokan, sedangkan Get-Command
mengembalikan hanya hasil pertama kecuali Anda memasukkan -TotalCount
parameter 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 where
alias 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:\>