Bagaimana cara saya bertanya pada PowerShell di mana ada sesuatu?
Misalnya, "notepad mana" dan mengembalikan direktori tempat notepad.exe dijalankan sesuai dengan jalur saat ini.
unix
powershell
command
MengembangkanChris
sumber
sumber
Get-Command <command> | Format-Table Path, Name
jadi saya bisa mendapatkan jalan tempat perintah duduk juga.select -expandproperty Path
.(gcm <command>).definition
untuk mendapatkan jalur saja.gcm
adalah alias default untukGet-Command
. Anda juga dapat menggunakan wildcard, misalnya:(gcm win*.exe).definition
.Berikut ini adalah setara * nix aktual, yaitu memberikan * nix-style output.
Ganti saja dengan apa pun yang Anda cari.
Ketika Anda menambahkannya ke profil Anda, Anda akan ingin menggunakan fungsi daripada alias karena Anda tidak dapat menggunakan alias dengan pipa:
Sekarang, ketika Anda memuat ulang profil Anda, Anda dapat melakukan ini:
sumber
okta
yang menunjuk ke skrip Powershell bernamaokta.ps1
yang tidak ada di saya$PATH
. Menggunakan jawaban yang diterima mengembalikan nama skrip (okta -> okta.ps1
). Ini baik-baik saja tetapi tidak memberi tahu saya lokasiokta.ps1
. Namun, menggunakan jawaban ini memberi saya seluruh jalur (C:\Users\blah\etc\scripts\okta.ps1
). Jadi +1 dari saya.Saya biasanya cukup mengetik:
atau
gcm adalah alias default untuk Get-Command.
Pada sistem saya, gcm note * output:
Anda mendapatkan direktori dan perintah yang cocok dengan apa yang Anda cari.
sumber
gcm note* | select CommandType, Name, Definition
. Jika Anda sering menjalankannya, Anda mungkin harus membungkusnya dalam suatu fungsi.Coba contoh ini:
sumber
(gcm py.exe).path
Proposisi saya untuk fungsi Mana:
sumber
Pertandingan cepat dan kotor untuk Unix
which
adalahTetapi mengembalikan beberapa baris jika ada sehingga menjadi
sumber
where.exe where
harus memberi tahu AndaC:\Windows\System32\where.exe
where.exe
sama denganwhich -a
, karena akan mengembalikan semua executable yang cocok, bukan hanya yang pertama yang dieksekusi. Artinya,where.exe notepad
memberic:\windows\notepad.exe
danc:\windows\system32\notepad.exe
. Jadi ini sangat tidak cocok untuk formulir$(which command)
. (Masalah lain adalah bahwa ia akan mencetak pesan kesalahan yang bagus dan bermanfaat jika perintah tidak ditemukan, yang juga tidak akan berkembang dengan baik$()
- yang dapat diatasi dengan/Q
, tetapi tidak sebagai alias.)where
tampaknya mencari variabel PATH sistem dan bukan variabel PATH shell saat ini. Lihat pertanyaan iniIni tampaknya melakukan apa yang Anda inginkan (saya menemukannya di http://huddledmasses.org/powershell-find-path/ ):
sumber
Periksa PowerShell Yang Ini .
Kode yang disediakan di sana menyarankan ini:
sumber
Saya suka
Get-Command | Format-List
, atau lebih pendek, menggunakan alias untuk keduanya dan hanya untukpowershell.exe
:Anda dapat menemukan alias seperti ini:
Penyelesaian tab berfungsi dengan
gcm
.sumber
Coba
where
perintah pada Windows 2003 atau yang lebih baru (atau Windows 2000 / XP jika Anda telah menginstal Resource Kit).BTW, ini menerima lebih banyak jawaban dalam pertanyaan lain:
Apakah ada yang setara dengan 'yang' pada Windows?
PowerShell setara dengan
which
perintah Unix ?sumber
where
alias keWhere-Object
commandlet di Powershell, jadi mengetikkanwhere <item>
prompt Powershell tidak menghasilkan apa-apa. Jawaban ini benar-benar salah - sebagaimana dicatat dalam jawaban yang diterima dalam pertanyaan terkait pertama, untuk mendapatkan DOSwhere
, Anda perlu mengetikwhere.exe <item>
.Saya memiliki
which
fungsi lanjutan ini di profil PowerShell saya:sumber
Menggunakan:
Atau versi ini, memanggil perintah asli di mana.
Versi ini juga berfungsi lebih baik, karena tidak terbatas pada file bat:
sumber
Jika Anda ingin comamnd yang menerima input dari pipa atau sebagai parameter, Anda harus mencoba ini:
salin-tempel perintah ke profil Anda (
notepad $profile
).Contoh:
sumber