使用powershell完成定时get任务
最近公司网站需要在后台定时请求和更新数据,但PHP毕竟是一种后端语言,不能自动运行,所以整理了几个方法。
1、在前端定时请求页面。
2、使用批处理。
3、使用windows计划任务。
第一种方案必须要打开浏览器,如果关闭了浏览器,可能就会出问题,而且浏览器一直处于打开状态,有点浪费资源。
第二种方案比较简单,直接调用浏览器打开页面就行,但是得不到回调值。
所以我打算使用powershell配合计划任务来完成这个工作。
我们可以使用win+R,然后输入powershell,然后回车来打开ps,不过此方法得不到管理员的权限(在win10下将不能写入文件到C盘),但不影响下面的命令执行。
我使用了一个Invoke-WebRequest命令来执行web request,此命令的详细用法请输入Get-Help Invoke-WebRequest来查看,或者查阅MSDN。
简单用法如下,需要一个Uri的开关,传一个请求地址,像这样:
1 Invoke-WebRequest -Uri "http://www.7cgcg.com/*/*.php"
得到的输出如下
1 StatusCode : 200 2 StatusDescription : OK 3 Content : 4 5 ######################################################## 6 记录日期:2017-03-28 14:34:44 7 更新截图数量:0 8 没有转码中的视频需要查询. 9 10 RawContent : HTTP/1.1 200 OK 11 Vary: Accept-Encoding 12 Keep-Alive: timeout=5, max=100 13 Connection: Keep-Alive 14 Content-Length: 159 15 Content-Type: text/html;charset=utf-8 16 Date: Tue, 28 Mar 2017 06:34:43 GMT 17 Server:... 18 Forms : {} 19 Headers : {[Vary, Accept-Encoding], [Keep-Alive, timeout=5, max=100], [Connection, Keep-Alive], [Content-Length, 159]...} 20 Images : {} 21 InputFields : {} 22 Links : {} 23 ParsedHtml : System.__ComObject 24 RawContentLength : 159
可以看到,StatusCode为200,Content就是内容了。
然后可以用 Select-Object命令,选出Content这个属性,这时候我们需要一个管道,将前一个命令的内容输入给后面的命令进行处理,这个和批处理是一样的,使用的是 | 符号
1 Invoke-WebRequest -Uri "http://www.7cgcg.com/*/*.php" | Select-Object -ExpandProperty Content
得到输出如下
1 ######################################################## 2 记录日期:2017-03-28 14:39:00 3 更新截图数量:0 4 没有转码中的视频需要查询.
接下来将内容保存到一个文件作为记录即可,这边用的是Out-File命令,注意加上-Append追加写入开关,否则会覆盖文件。
1 Invoke-WebRequest -Uri "http://www.7cgcg.com/*/*.php" | Select-Object -ExpandProperty Content | Out-File -Append d:\mts_log.txt
完成之后,可以将命令保存为ps1格式的powershell脚本文件,新建一个计划任务定时执行即可。