Saya tahu saya dapat mengunduh dan menginstal pustaka aformentioned (wget untuk Windows), tetapi pertanyaan saya adalah ini:
Di Windows PowerShell, apakah ada alternatif asli wget
?
Saya wget
hanya perlu mengambil file dari URL yang diberikan dengan HTTP GET. Misalnya:
wget http://www.google.com/
Jawaban:
Berikut ini adalah PS 3.0 sederhana dan kemudian satu-liner yang berfungsi dan tidak melibatkan banyak PS PS:
Perhatikan bahwa:
wget
adalah alias untukInvoke-WebRequest
Pada instalasi Windows Server Core, Anda harus menuliskan ini sebagai
Sebelum 20 Sep 2014, saya menyarankan
sebagai jawaban. Namun, ini tidak berfungsi dalam semua kasus, karena
>
operator (yang merupakan alias untukOut-File
) mengubah input ke Unicode.Jika Anda menggunakan Windows 7, Anda harus menginstal versi 4 atau lebih baru dari Windows Management Framework.
Anda mungkin menemukan bahwa melakukan
$ProgressPreference = "silentlyContinue"
sebelumInvoke-WebRequest
akan secara signifikan meningkatkan kecepatan unduhan dengan file besar; variabel ini mengontrol apakah UI kemajuan diberikan.sumber
Jika Anda hanya perlu mengambil file, Anda bisa menggunakan metode DownloadFile dari objek WebClient :
Di mana
$url
string yang mewakili URL file, dan$path
mewakili jalur lokal tempat file akan disimpan.Catatan yang
$path
harus menyertakan nama file; tidak bisa hanya berupa direktori.sumber
(new-object System.Net.WebClient).DownloadFile( '$url, $path)
ini adalah korespondensi terbaik yang pernahwget
saya lihat sejauh ini. Terima kasih!$client.DownloadFile( "http://blog.stackexchange.com/", "c:/temp2/_Download.html")
(new-object System.Net.WebClient).DownloadData($url) | Out-Null
Ada
Invoke-WebRequest
di PowerShell versi 3 yang akan datang:sumber
dd
...-Outfile
parameternya tampak asing ketika Anda bisa menggunakan>
(untuk menimpa) atau>>
(untuk menambahkan) ke file.wget
:)wget
dancurl
aliasted toInvoke-WebRequest
(iwr
) secara default: DAgak berantakan tapi ada posting blog ini yang memberi Anda petunjuk untuk mengunduh file.
Atau (dan ini adalah salah satu yang saya sarankan) Anda dapat menggunakan BITS:
Ini akan menunjukkan kemajuan dan akan mengunduh file ke direktori saat ini.
sumber
Start-BitsTransfer : Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))
. Saya bingung: |PowerShell V4 One-liner:
atau
Ini pada dasarnya Warren (luar biasa) V3 one-liner (terima kasih untuk ini!) - hanya dengan perubahan kecil untuk membuatnya bekerja di V4 PowerShell.
One-liner Warren - yang hanya menggunakan
wget
daripadaiwr
- masih harus bekerja untuk V3 (setidaknya, saya kira; tidak diuji, meskipun). Bagaimanapun. Tetapi ketika mencoba menjalankannya di V4 PowerShell (seperti yang saya coba), Anda akan melihat PowerShell gagal untuk menyelesaikanwget
sebagai cmdlet / program yang valid.Bagi mereka yang tertarik, yaitu - ketika saya mengambil dari komentar Bob sebagai jawaban atas jawaban yang diterima (terima kasih, bung!) - karena pada PowerShell V4,
wget
dancurl
aliasInvoke-WebRequest
, diaturiwr
secara default . Dengan demikian,wget
tidak bisa diselesaikan (jugacurl
tidak bisa bekerja di sini) .sumber
Berikut adalah fungsi PowerShell yang menyelesaikan URL pendek sebelum mengunduh file
Gunakan seperti ini untuk mengunduh file ke folder saat ini:
Atau untuk mengunduh file ke folder yang ditentukan:
sumber
Fungsi berikut akan mendapatkan URL.
Beberapa komentar:
(New-Object Net.WebClient).DownloadFile($url, $path)
berfungsi dengan baik.if (!$path) {...}
Bagian menangani kasus sederhana di mana Anda hanya ingin men-download file ke direktori saat ini menggunakan nama yang diberikan dalam URL.sumber
Gunakan bash shell Windows 10 yang termasuk wget setelah fitur windows diatur.
Cara menginstal bash shell Ubuntu di Windows:
YouTube: Menjalankan Bash di Ubuntu di Windows!
Subsistem Windows untuk Dokumentasi Linux
sumber
Jika Windows Anda cukup baru (seperti versi 1809 atau lebih baru), ada ikal "nyata" yang tersedia. curl memiliki opsi Baris perintah "-O" (huruf besar O; huruf kecil tidak akan melakukan hal yang sama!) Opsi "-O", atau "-remote-name" memberitahu curl, bahwa file yang disimpan mendapatkan nama yang sama dengan nama file-bagian dari URL.
Kita perlu memulai ini sebagai "curl.exe", untuk membedakannya dari "curl" Alias untuk "Invoke-WebRequest". Kebetulan ia bekerja di cmd.exe tanpa perubahan.
Menggunakan contoh yang sama seperti pada jawaban lain di sini
(Situs tidak akan mengizinkan saya untuk menambahkan ini sebagai komentar, karena saya tampaknya membutuhkan lebih banyak "reputasi" untuk itu - sehingga mendapat jawaban baru)
sumber
Invoke-WebRequest dengan parameter -outfile mengharapkan string, jadi jika nama file Anda dimulai dengan angka, dan tidak dilampirkan dalam tanda kutip, tidak ada file output yang dibuat.
misalnya.
Invoke-WebRequest -Uri "http://www.google.com/" -outfile "2.pdf"
Ini tidak mempengaruhi nama file yang dimulai dengan huruf.
sumber
wget
alias aliasInvoke-WebRequest
, dan mirip dengan yang di atas)Ini seharusnya berfungsi agar Anda dapat mengatasi hal-hal yang tidak diinisialisasi oleh browser. Perhatikan param "-UseBasicParsing".
sumber
-UseBasicParsing
.