通过Windows上的计划任务加载URL的推荐方法

时间:2009-12-31 22:33:11

标签: .net windows internet-explorer scheduling scheduled-tasks

我在Windows机器上托管了一个网页,我需要确保每天至少加载一次。我目前的计划是创建一个计划任务,打开Internet Explorer并点击URL:

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

这很简单,设置和工作正常,但它让我感到非常黑客,因为Internet Explorer实际上必须打开并点击此URL。我不需要从该页面返回任何输入,它只是将缓存的数据存储在文件中。

这样做有一种更明智的方式吗?如果重要,这是一个VB.net网站。

提前致谢!

8 个答案:

答案 0 :(得分:114)

正如Remus Rusanu所指出的,PowerShell将是最佳选择。这是一个简单的单行程序,您可以使用它创建计划任务,而无需编写单独的.ps1文件:

powershell -ExecutionPolicy Bypass -Command
    Invoke-WebRequest 'http://localhost/cron.aspx' -UseBasicParsing

请注意,为了清楚起见,在所有这些命令行中添加了换行符。在尝试运行命令之前删除它们。

您可以像这样创建计划任务:(从提升的命令提示符运行)

schtasks /create /tn "MyAppDailyUpdate"
    /tr "powershell -ExecutionPolicy Bypass -Command
        Invoke-WebRequest 'http://localhost/cron.aspx' -UseBasicParsing"
    /sc DAILY /ru System

以上内容适用于PowerShell 3+。如果你需要适合旧版本的东西,这里就是单行:

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

您可以像这样创建计划任务:(来自提升的命令提示符)

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

schtasks示例将任务设置为每天运行 - 请参阅schtasks documentation了解更多选项。

答案 1 :(得分:40)

您可以安排PowerShell脚本。 PS功能非常强大,可让您访问整个.Net Framework,以及更改。这是一个例子:

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

答案 2 :(得分:18)

另一个选择是VB Script。例如(另存为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..."

答案 3 :(得分:11)

从PowerShell 5.0开始,curlInvoke-WebRequest的别名,因此您可以按如下方式创建计划任务:

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

您也可以使用Invoke-WebRequest,但curl更简洁。

答案 4 :(得分:8)

This SuperUser.com answer要简单得多。

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

更具体地说,这是它在Windows预定任务中的外观:

enter image description here

虽然,这可能会在后台运行默认配置的浏览器。如果它必须是IE,那么应该配置它。这可能是最好的选择。拥有直接作为任务的Action步骤运行的解决方案是一件好事。所有信息都在那里。如果它简洁,那就更好了,所以你可以在不滚动文本框的情况下看到大部分命令。

WGET / CURL - 不错的选择

如果有的话,WGET将是cmd..start..url的一个很好的替代品。 I'm not the first to think of this。缺点是你必须下载WGET for Windows才能工作 - 它不是一个开箱即用的解决方案。但WGET更轻,重要的是为您提供更多 power 。您可以发送许多其他类型的URL调用。这包括不同的HTTP方法,如POST,自定义标头等。 Curl是一个不错的选择,而不是Wget - 它们具有不同的特征集,许多重叠。

PowerShell - 不推荐

PowerShell,可能被认为是打火机"选项,但你也加载了一个有点滞后的PowerShell(.Net AppDomain),而且命令也要长得多,因此如果你经常这样做,就很难记住。所以PowerShell并不是最好的选择。

VBScript - 不推荐

显然,VBScript不太值得推荐。你还需要记住更多,脚本非常大。除非您有其他保证脚本的步骤,否则不要使用完全独立的资源来执行您可以直接在计划任务中完成的任务。

另外,请看类似的问题:

答案 5 :(得分:5)

最常见的命令行http请求工具的Windows版本,例如cURLwget。您当然可以创建一个运行其中一个的计划任务。我也是在Windows Scripting Host脚本中完成此操作,如果您需要动态循环或创建URL参数,或者其他一些。

答案 6 :(得分:1)

在PowerShell 4.0上尝试使用curl, curl是Invoke-WebRequest的别名,因此您可以按以下方式创建计划任务:

操作:启动程序 程序/脚本:powershell 添加参数:curl http://www.example.com/foo/bar

像魅力一样工作!

答案 7 :(得分:1)

如果您在运行 PowerShell 脚本时收到“底层连接已关闭:发送时发生意外错误”消息,请将以下代码行添加到脚本顶部:

[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12

随着对 TLS 1.2 的最新支持和 TLS 1.0、1.1 等的弃用,您的 PowerShell 脚本需要进行此必要的更改。