Descargar archivos dede un .bat

Iniciado por dgalazv, 17 Noviembre 2017, 13:43 PM

0 Miembros y 1 Visitante están viendo este tema.

dgalazv

Hola amigos,
estoy creando un bat para automatizar varias tareas en mis windows server, hasta ahora voy super bien, pero estoy en un problema, ya que necesito descargar archivos desde un servidor web (servidor dentro de LAN) y guardarlo dentro de una carpeta, pero al descargalo con el comando:

powershell Invoke-WebRequest -OutFile cscc.dat http://x.x.x.x/windows/utilitario/bat-rabbit

Se descarga . hasta aqui todo bien, pero al abrirlo siempre windows me dice que esta corrupto al revisarlo efectivamente esta modificado y si descarga el mismo archivo desde firefox (ejemplo) se descaga sin problemas, ahora me diran que utilice wget, esto funciona super bien, pero como es un script que al final lo convierto a .exe, quedo en las mismas ya que al bajar wget queda corrupto y no funciona.

Estoy detenido con mi desarrollo, ya que si no puedo bajar los archivos no puedo seguir.

Alguna recomendacion?

Eleкtro

#1
Hola. Dices que estás usando un Batch-script, pero estás usando Powershell por que te has dado cuenta de las limitaciones de Batch (ya que no sirve para descargar un archivo)... y es por ello que te convendría mucho más desarrollar todo el script en Powershell. Deberías olvidar Batch, más siendo administrador de un server... Powershell fue creado para satisfacer las necesidades de un admin.

Cita de: dgalazv en 17 Noviembre 2017, 13:43 PM
ahora me diran que utilice wget, esto funciona super bien, pero como es un script que al final lo convierto a .exe, quedo en las mismas ya que al bajar wget queda corrupto y no funciona.

Eso no lo entiendo muy bien, ya que siempre tienes al alcance la posibilidad de tener el script y wget.exe ambos en el mismo directorio, es decir, una copia de wget.exe que hayas descargado bien con Firefox por ejemplo... y además también puedes empacar el script y wget en el mismo archivo (.exe), así que no le veo el problema.

...Eso sería una solución. De todas formas lo de recurrir a Batch y a programas de terceros como WGET teniendo Powershell lo veo innecesario, así que intentaré ofrecerte ayuda en ese sentido:

Primero prueba con una sintaxis más completa del cmdlet Invoke-WebRequest:
Código (delphi) [Seleccionar]
Invoke-WebRequest -URI "http://.../archivo.dat" -Method "Default" -DisableKeepAlive -TimeoutSec "60" -OutFile ".\archivo.dat"

Si eso te da algún tipo de problema, puedes probar usando la clase System.Net.WebClient de .NET Framework:
Script.ps1
Código (delphi) [Seleccionar]
$url = "http://.../archivo.dat"
$output = ".\archivo.dat"

$wc = New-Object System.Net.WebClient
$wc.DownloadFile( $url, $output )
$wc.Dispose()

Exit(0)


...si realmente quieres hacer esto desde Batch, entonces simplificarías la ejecución de Powershell de la siguiente manera:
Script.cmd
@Echo OFF
SET "url=http://.../archivo.dat"
SET "output=.\archivo.dat"

"Powershell.exe" "(New-Object System.Net.WebClient).DownloadFile(\"%url%\", \"%output%\")"

Exit /B 0


Si esta solución de la clase System.Net.WebClient te sigue "descargando un archivo corrupto", entonces yo creo que el problema no tiene que ver relación con el modo en el que estás descargando el archivo... sino con alguna otra cosa.

Saludos!








dgalazv

Muchas gracias amigo, mira al final me funciono de la siguiente manera.

powershell Invoke-WebRequest -OutFile a-ransom2012.ps1 http://x.x.x.x/windows/utilitario/a-ransom2012.ps1

Solo con esta linea funciono de maravilla.

Gracias