Wiem, że mogę pobrać i zainstalować wspomnianą bibliotekę (wget dla Windows), ale moje pytanie brzmi:
Czy w Windows PowerShell istnieje natywna alternatywa dla wget
?
Muszę wget
po prostu pobrać plik z podanego adresu URL za pomocą HTTP GET. Na przykład:
wget http://www.google.com/
Odpowiedzi:
Oto prosty PS 3.0, a później jednoliniowy, który działa i nie wymaga dużo PS barf:
Uwaga:
wget
jest pseudonimem dlaInvoke-WebRequest
W instalacjach systemu Windows Server Core musisz zapisać to jako
Zasugerowałem przed 20 września 2014 r
jako odpowiedź. Nie działa to jednak we wszystkich przypadkach, ponieważ
>
operator (który jest aliasemOut-File
) konwertuje dane wejściowe na Unicode.Jeśli używasz systemu Windows 7, musisz zainstalować wersję 4 lub nowszą z Windows Management Framework.
Może się okazać, że wykonanie tego
$ProgressPreference = "silentlyContinue"
wcześniejInvoke-WebRequest
znacznie poprawi szybkość pobierania dużych plików; ta zmienna kontroluje, czy interfejs postępu jest renderowany.źródło
Jeśli potrzebujesz tylko pobrać plik, możesz użyć metody DownloadFile obiektu WebClient :
Gdzie
$url
jest ciąg reprezentujący adres URL pliku i$path
reprezentuje ścieżkę lokalną, do której plik zostanie zapisany.Pamiętaj, że
$path
musi zawierać nazwę pliku; to nie może być tylko katalog.źródło
(new-object System.Net.WebClient).DownloadFile( '$url, $path)
jest to najlepsza korespondencja,wget
jaką do tej pory widziałem. Dzięki!$client.DownloadFile( "http://blog.stackexchange.com/", "c:/temp2/_Download.html")
(new-object System.Net.WebClient).DownloadData($url) | Out-Null
Jest
Invoke-WebRequest
w nadchodzącej wersji PowerShell 3:źródło
dd
...-Outfile
parametr wydaje się obcy, gdy można po prostu użyć>
(do zastąpienia) lub>>
(do dołączenia) do pliku.wget
robi :)wget
icurl
domyślnie są przypisane doInvoke-WebRequest
(iwr
): DTo trochę bałagan, ale jest ten post na blogu, który zawiera instrukcje dotyczące pobierania plików.
Alternatywnie (i to polecam) możesz użyć BITS:
Pokazuje postępy i pobiera plik do bieżącego katalogu.
źródło
Start-BitsTransfer : Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))
. Jestem zdziwiony: |One-liner PowerShell V4:
lub
Jest to po prostu Warren (niesamowity) jednowierszowy V3 (dzięki za to!) - z drobną zmianą, aby działał w V4 PowerShell.
Jednowierszowy Warren - który po prostu używa
wget
zamiastiwr
- powinien nadal działać dla V3 (Przynajmniej, jak sądzę; chociaż go nie testowałem). Tak czy siak. Ale podczas próby uruchomienia go w programie PowerShell V4 (tak jak próbowałem) zobaczysz, że PowerShell nie może zostać rozpoznanywget
jako poprawny cmdlet / program.Dla zainteresowanych, to jest - jak wybrałem z komentarza Boba w odpowiedzi na zaakceptowaną odpowiedź (dzięki, człowieku!) - ponieważ od PowerShell V4,
wget
icurl
są aliasyInvoke-WebRequest
, ustawioneiwr
domyślnie . Dlategowget
nie można go rozwiązać (jak równieżcurl
nie może tutaj działać) .źródło
Oto funkcja PowerShell, która rozwiązuje krótkie adresy URL przed pobraniem pliku
Użyj go w ten sposób, aby pobrać plik do bieżącego folderu:
Lub, aby pobrać plik do określonego folderu:
źródło
Poniższa funkcja otrzyma adres URL.
Kilka komentarzy:
(New-Object Net.WebClient).DownloadFile($url, $path)
działa dobrze.if (!$path) {...}
Sekcja obsługuje prosty przypadek, gdy po prostu chcesz pobrać plik do bieżącego katalogu, używając nazwy podanej w adresie URL.źródło
Użyj powłoki bash systemu Windows 10, która zawiera wget po skonfigurowaniu funkcji systemu Windows.
Jak zainstalować powłokę bash Ubuntu w systemie Windows:
YouTube: Uruchamianie Bash na Ubuntu w systemie Windows!
Dokumentacja podsystemu Windows dla systemu Linux
źródło
Jeśli twój system Windows jest wystarczająco nowy (jak wersja 1809 lub nowsza), dostępna jest „prawdziwa” lokówka. curl ma opcję wiersza polecenia „-O” (wielka litera O; mała litera nie zrobi tego samego!) Opcja „-O”, alternatywnie „--remote-name” informuje curl, że zapisany plik otrzymuje taka sama nazwa jak część nazwy pliku w adresie URL.
Należy uruchomić to jako „curl.exe”, aby odróżnić go od „curl” Alias dla „Invoke-WebRequest”. Nawiasem mówiąc, działa w cmd.exe bez zmian.
Korzystając z tego samego przykładu, co w innej odpowiedzi tutaj
(Witryna nie pozwoli mi dodać tego jako komentarza, ponieważ najwyraźniej potrzebuję do tego większej „reputacji” - więc otrzymuje nową odpowiedź)
źródło
Invoke-WebRequest z parametrem -outfile oczekuje ciągu, więc jeśli nazwa pliku zaczyna się od liczby, a nie jest zawarta w cudzysłowach, plik wyjściowy nie jest tworzony.
na przykład.
Invoke-WebRequest -Uri "http://www.google.com/" -outfile "2.pdf"
Nie wpływa to na nazwy plików zaczynające się na literę.
źródło
wget
jest to aliasInvoke-WebRequest
i jedno podobne do powyższego)To powinno pomóc ci obejść rzeczy zainicjowane bez przeglądarki. Zwróć uwagę na parametr „-UseBasicParsing”.
źródło
-UseBasicParsing
.