Sepertinya saya tidak dapat menemukan apa pun tentang Powershell yang setara dengan whereperintah dari cmd. Haruskah saya hanya menyebutnya dari cmdatau ada sesuatu yang lebih elegan di PS?
Sepertinya saya tidak dapat menemukan apa pun tentang Powershell yang setara dengan whereperintah dari cmd. Haruskah saya hanya menyebutnya dari cmdatau ada sesuatu yang lebih elegan di PS?
Jawaban:
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
gcmganti mengetik seluruh Get-Commandkata setiap kali
gcm notepadtelah 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.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...
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
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:\>