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

Posted

技术标签:

【中文标题】在 Windows 上通过计划任务加载 URL 的推荐方法【英文标题】:Recommended method for loading a URL via a scheduled task on Windows 【发布时间】:2010-12-31 12:51:07 【问题描述】:

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

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

这很容易设置并且工作正常,但它给我的印象是一个黑客,因为 Internet Explorer 实际上必须打开并点击这个 URL。我不需要从这个页面返回任何输入,它只是在命中时将缓存的数据存储在文件中。

有没有更巧妙的方法来做到这一点?万一这很重要,这是一个 VB.net 网站。

提前致谢!

【问题讨论】:

虽然正确的 VB 脚本是一种更好的方法,但您可能希望注意,如果任务在任务计划程序的设置选项卡中运行超过一个小时,则可以停止该任务。跨度> 【参考方案1】:

正如 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 了解更多选项。

【讨论】:

你有一个包含查询字符串的示例(以及转义符号?) @PaulGeorge 用 ^& 替换 & 应该可以解决问题。 这对我有用,单引号,不改变 & 符号:powershell -ExecutionPolicy unrestricted -Command "(New-Object Net.WebClient).DownloadString('localhost/cron.aspx?var1=cat&var2=dog')" 有没有办法在这个单行中添加一些东西来包括忽略 SSL 警告? 感谢您的回答。 -UseBasicParsing 参数非常有用。它避免了 Internet Explorer 增强安全配置阻止网站的错误【参考方案2】:

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

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

【讨论】:

【参考方案3】:

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

【讨论】:

啊,我应该想到 VBScript。好点子。 +1 并为您接受。其他人也有很棒的想法,但是您辛苦了,提出了一个完整的解决方案!非常感谢瑞克! 我将如何在 ubuntu 服务器中执行此操作? vbs的替代品?爪哇?【参考方案4】:

This SuperUser.com answer 要简单得多。

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

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

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

WGET / CURL - 不错的选择

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

PowerShell - 不推荐

PowerShell,可能被认为是一个“更轻”的选项,但您还加载了一个有点滞后的 PowerShell (.Net AppDomain),而且命令更长,因此更难记住是否你经常这样做。所以 PowerShell 不是最好的选择。

VBScript - 不推荐

显然,VBScript 不太值得推荐。你需要记住的东西太多了,而且脚本也很大。除非您有其他需要脚本的步骤,否则不要有一个完全独立的资源来执行您可以直接在计划任务中完成的事情。

另外,请参阅类似问题:

https://superuser.com/questions/321215/how-can-i-open-a-url-on-a-schedule-in-the-default-browser Simple-as-possible task schedule to call web page

【讨论】:

嗨@Todd,这个解决方案将打开一个不在后台运行的浏览器 后台操作不是操作的要求。尽管使用 cmd 很容易做到这一点,但我认为结合这些选项。 我尝试了 Nikhil Dabas 和 Remus Rusanu 首次提供的 Powershell 解决方案,但都没有成功。这是一个非常适合我的需求。 单任务调度器可以调用两个网页吗?基本上我需要调用 3 个网页,我不想为它创建 3 个差异调度程序。 您或许可以使用 cmd 方法(未经测试)组合多个语句:/c start https://url1.com & start https://url2.com。见***.com/questions/8055371/…【参考方案5】:

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

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

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

【讨论】:

与往常一样,正确答案总是最后。使用 cmd /c 将打开一个浏览器窗口,您不一定想要【参考方案6】:

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

【讨论】:

+1 有很多很棒的选择,我特别喜欢 Windows Scripting Host 的想法,但是我选择了 Rick 的解决方案,因为他在完整的解决方案中付出了更多努力。感谢您对未来的想法!【参考方案7】:

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

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

工作就像一个魅力!

【讨论】:

欢迎来到 Stack Overflow!虽然链接是分享知识的好方法,但如果它们在未来被破坏,它们将无法真正回答问题。将回答问题的链接的基本内容添加到您的答案中。如果内容太复杂或太大而无法在此处放置,请描述所提出解决方案的总体思路。请记住始终保留对原始解决方案网站的链接引用。见:How do I write a good answer?【参考方案8】:

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

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

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

【讨论】:

以上是关于在 Windows 上通过计划任务加载 URL 的推荐方法的主要内容,如果未能解决你的问题,请参考以下文章

Windows通过定时计划任务执行bat文件

Windows通过定时计划任务执行bat文件

Windows通过定时计划任务执行bat文件

vbscript 通过任务计划程序在 Windows 10 中打开 excel 文件

Windows权限维持——计划任务

通过 CMD 查找名称中包含“UPDATE”的所有计划的 Windows 任务