首页 > 代码库 > 使用powershell完成定时get任务

使用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脚本文件,新建一个计划任务定时执行即可。

 

使用powershell完成定时get任务