2009-12-31 12 views
52

Tengo una página web alojada en una caja de Windows que necesito asegurar que se cargue al menos una vez al día. Mi plan actual es crear una tarea programada que se abre Internet Explorer y le pega la URL:Método recomendado para cargar una URL a través de una tarea programada en Windows

"C:\Program Files\Internet Explorer\iexplore.exe" myurl.com/script_to_run_daily.aspx 

Ésta era simple de instalar y funciona bien, pero me parece un truco porque Internet Explorer en realidad tiene que abrir y pulsa esta URL No necesito ninguna retroalimentación desde esta página, simplemente almacena datos almacenados en caché en los archivos cuando se golpea.

¿Hay una forma más sencilla de hacer esto? En caso de que importe, este es un sitio de VB.net.

¡Gracias de antemano!

+0

Si bien una secuencia de comandos de VB adecuada es una mejor manera de hacerlo, es posible que desee tener en cuenta que es posible detener la tarea si se ejecuta durante más de una hora en la pestaña de configuración del Programador de tareas. –

Respuesta

106

Como se señaló por Remus Ruşanu, PowerShell sería el camino a seguir. He aquí una sencilla de una sola línea que se puede utilizar para crear una tarea programada, sin necesidad de escribir un archivo .ps1 separada:

powershell -ExecutionPolicy unrestricted -Command "(New-Object Net.WebClient) 
              .DownloadString(\"http://localhost/cron.aspx\")" 

puede crear la tarea programada de esta manera:

schtasks /create /tn "MyAppDailyUpdate" /tr "powershell -ExecutionPolicy unrestricted 
     -Command \"(New-Object Net.WebClient) 
       .DownloadString(\\\"http://localhost/cron.aspx\\\")\"" /sc DAILY /ru System 

Este ejemplo configura la tarea para ejecutar diariamente; consulte el schtasks.exe documentation para obtener más opciones.

+0

¿Tiene un ejemplo que incluye una cadena de consulta (y escapando de un amplificador y?) –

+0

@PaulGeorge reemplazando símbolos y^y debería hacer el truco. –

+5

Esto funciona para mí, comillas simples, sin cambio en ampersands: powershell -ExecutionPolicy no restringido -Command "(New-Object Net.WebClient) .DownloadString ('http: //localhost/cron.aspx? Var1 = cat & var2 = dog') " –

5

Existen versiones de Windows de las herramientas de solicitud http de línea de comando más comunes, como cURL y wget. Ciertamente podría crear una tarea programada que ejecutaría uno de estos. También hice esto desde una secuencia de comandos de Windows Scripting Host, si necesitabas crear un bucle o crear parámetros de URL sobre la marcha, o algo así.

+0

+1 para curl y wget –

+0

+1 para obtener muchas excelentes opciones, me gusta especialmente la idea de Windows Scripting Host, pero fue con la solución de Rick, ya que hizo un esfuerzo adicional con la solución completa. ¡Gracias por las ideas para el futuro! –

38

Puede programar un script PowerShell. La PS es bastante potente y le da acceso a todo el .Net Framework, más el cambio. Aquí hay un ejemplo:

$request = [System.Net.WebRequest]::Create("http://www.example.com") 
$response = $request.GetResponse() 
$response.Close() 
+0

Esta es la solución más limpia – Liam

+0

buena solución está funcionando –

17

Otra opción es VB Script. Por ejemplo (guardar como file.vbs):

sSrcUrl = "http://yourdomain.com/yourfile.aspx" 
sDestFolder = "C:\yourfolder\" 
sImageFile = "filename.txt" 
set oHTTP = WScript.CreateObject("MSXML2.ServerXMLHTTP") 
oHTTP.open "GET", sSrcUrl, False 
oHTTP.send "" 
set oStream = createobject("adodb.stream") 
Const adTypeBinary = 1 
Const adSaveCreateOverWrite = 2 
oStream.type = adTypeBinary 
oStream.open 
oStream.write oHTTP.responseBody 
oStream.savetofile sDestFolder & sImageFile, adSaveCreateOverWrite 
set oStream = nothing 
set oHTTP = nothing 
WScript.Echo "Done..." 
+0

Ah, debería haber pensado en VBScript. Gran idea. A +1 y una aceptación para ti. Otros también tuvieron grandes ideas, ¡pero hicieron el trabajo duro de presentar una solución completa! Muchas gracias Rick! –

+0

¿cómo haré esto en el servidor de ubuntu? alternativa para vbs? ¿Java? –

5

This SuperUser.com answer es mucho más simple.

cmd /c start http://example.com/somePage.html 

Más específicamente, aquí es cómo se ve en una tarea programada de Windows:

enter image description here

Aunque, esto probablemente se ejecuta el navegador configurado por defecto en el fondo. Si debe ser IE, entonces debería configurarse. Esta es probablemente la mejor opción. Es bueno tener una solución que se ejecute directamente como un paso de acción de la tarea. Toda la información está ahí. Incluso mejor si es concisa, por lo que puede ver la mayoría del comando sin desplazarse por el cuadro de texto.

WGET/CURL - buena alternativa

En todo caso, WGET sería una buena alternativa a cmd..start..url. I'm not the first to think of this. La desventaja es que tienes que descargar WGET para Windows para que funcione: no es una solución lista para usar. Pero WGET es más ligero y, lo que es más importante, le da más poder . Puede enviar muchos otros tipos de llamadas a la URL.Esto incluye diferentes métodos HTTP, como POST, encabezados personalizados y más. Curl es una buena opción, en lugar de Wget, tienen diferentes conjuntos de funciones, muchas de ellas superpuestas.

PowerShell - no se recomienda

PowerShell, puede ser considerado una opción "más ligero", pero también se va a cargar una PowerShell (.Net dominio de aplicación), que tiene un poco de retraso, y también el comando es mucho más largo y, por lo tanto, es más difícil de recordar si lo hace regularmente. Entonces PowerShell no es la mejor opción.

VBScript - no se recomienda

Claramente, VBScript es menos recomendable. Tienes mucho más que deberías recordar, y el guión es bastante grande. A menos que tenga otros pasos que justifiquen una secuencia de comandos, no tenga un recurso completamente separado solo para hacer algo que podría haber logrado directamente dentro de una tarea programada.

También, ver preguntas similares:

+0

Hola @Todd, esta solución abrirá un navegador que no se ejecuta en el fondo – MichaelMao

+0

La operación de fondo no era un requisito de la op. Aunque eso es bastante fácil de hacer con cmd, creo que, en combinación con estas opciones. – Todd

+0

Tienes razón, mi falta – MichaelMao

8

A partir de PowerShell 5.0, curl es un alias para Invoke-WebRequest, por lo que puede crear una tarea programada de la siguiente manera:

Action: Start a program 
Program/script: powershell 
Add arguments: curl http://www.example.com/foo/bar 

También puede usar Invoke-WebRequest, pero curl es más conciso.

+0

Como siempre, la respuesta correcta es siempre la última. Usar cmd/c abrirá una ventana del navegador, que no necesariamente quiere – Hypersapien

Cuestiones relacionadas