Sé que puedo descargar e instalar la biblioteca mencionada (wget para Windows), pero mi pregunta es esta:
En Windows PowerShell, ¿hay una alternativa nativa a wget
?
wget
Simplemente necesito recuperar un archivo de una URL dada con HTTP GET. Por ejemplo:
wget http://www.google.com/
Respuestas:
Aquí hay una simple PS 3.0 y una línea única que funciona y no involucra mucho PS barf:
Tenga en cuenta que:
wget
es un alias paraInvoke-WebRequest
En las instalaciones de Windows Server Core, deberá escribir esto como
Antes del 20 de septiembre de 2014, sugerí
como respuesta Sin embargo, esto no funciona en todos los casos, ya que el
>
operador (que es un alias paraOut-File
) convierte la entrada a Unicode.Si está utilizando Windows 7, deberá instalar la versión 4 o posterior de Windows Management Framework.
Es posible que hacer un
$ProgressPreference = "silentlyContinue"
antesInvoke-WebRequest
mejore significativamente la velocidad de descarga con archivos grandes; Esta variable controla si se procesa la IU de progreso.fuente
Si solo necesita recuperar un archivo, puede usar el método DownloadFile del objeto WebClient :
Donde
$url
es una cadena que representa la URL del archivo y$path
representa la ruta local en la que se guardará el archivo.Tenga en cuenta que
$path
debe incluir el nombre del archivo; no puede ser solo un directorio.fuente
(new-object System.Net.WebClient).DownloadFile( '$url, $path)
que es la mejor correspondenciawget
que he visto hasta ahora. ¡Gracias!$client.DownloadFile( "http://blog.stackexchange.com/", "c:/temp2/_Download.html")
(new-object System.Net.WebClient).DownloadData($url) | Out-Null
Existe
Invoke-WebRequest
en la próxima versión 3 de PowerShell:fuente
dd
...-Outfile
parámetro parece extraño cuando puedes usar>
(para sobrescribir) o>>
(para agregar) a un archivo.wget
hace :)wget
ycurl
están alias aInvoke-WebRequest
(iwr
) por defecto: DEs un poco desordenado, pero existe esta publicación de blog que le da instrucciones para descargar archivos.
Alternativamente (y este es uno que recomendaría) puede usar BITS:
Mostrará el progreso y descargará el archivo al directorio actual.
fuente
Start-BitsTransfer : Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))
. Estoy perplejo: |PowerShell V4 One-liner:
o
Esto es básicamente la línea única V3 de Warren (increíble) (¡gracias por esto!) , Con solo un pequeño cambio para que funcione en un PowerShell V4.
El one-liner de Warren, que simplemente usa en
wget
lugar deiwr
, aún debería funcionar para V3 (al menos, supongo; sin embargo, no lo probó). De todas formas. Pero cuando intente ejecutarlo en un V4 PowerShell (como lo intenté), verá que PowerShell no se resuelvewget
como un cmdlet / programa válido.Para aquellos interesados, eso es, como leí en el comentario de Bob en respuesta a la respuesta aceptada (¡gracias, hombre!) , Porque a partir de PowerShell V4,
wget
ycurl
tienen un aliasInvoke-WebRequest
, configuradoiwr
de manera predeterminada . Por lo tanto,wget
no se puede resolver (y tampococurl
puede funcionar aquí) .fuente
Aquí hay una función de PowerShell que resuelve URL cortas antes de descargar el archivo
Úselo así para descargar el archivo a la carpeta actual:
O para descargar el archivo a una carpeta específica:
fuente
La siguiente función obtendrá una URL.
Algunos comentarios:
(New-Object Net.WebClient).DownloadFile($url, $path)
funciona bien.if (!$path) {...}
sección maneja el caso simple en el que solo desea descargar el archivo al directorio actual utilizando el nombre dado en la URL.fuente
Use Windows 10 bash shell que incluye wget una vez que la función de Windows está configurada.
Cómo instalar Ubuntu bash shell en Windows:
YouTube: ¡Ejecutar Bash en Ubuntu en Windows!
Subsistema de Windows para la documentación de Linux
fuente
Si su Windows es lo suficientemente nuevo (como la versión 1809 o más reciente), hay un rizo "real" disponible. curl tiene la opción de línea de comandos "-O" (letra O mayúscula; ¡la letra minúscula no hará lo mismo!) La opción "-O", alternativamente "--remote-name" le dice a curl que el archivo guardado obtiene mismo nombre que la parte del nombre de archivo de la URL.
Uno necesita comenzar esto como "curl.exe", para distinguirlo del "curl" de Alias para "Invoke-WebRequest". Por cierto, funciona en cmd.exe sin cambios.
Usando el mismo ejemplo que en otra respuesta aquí
(El sitio no me permitirá agregar esto como un comentario, ya que aparentemente necesito más "reputación" para eso, por lo que obtiene una nueva respuesta)
fuente
Invoke-WebRequest con el parámetro -outfile espera una cadena, por lo que si su nombre de archivo comienza con un número y no está entre comillas, no se crea ningún archivo de salida.
p.ej.
Invoke-WebRequest -Uri "http://www.google.com/" -outfile "2.pdf"
Esto no afecta a los nombres de archivo que comienzan con una letra.
fuente
wget
es un alias deInvoke-WebRequest
, y uno similar al anterior)Esto debería funcionar para evitar las cosas no inicializadas del navegador. Tenga en cuenta el parámetro "-UseBasicParsing".
fuente
-UseBasicParsing
.