Powershell | DownloadString | 外部网站 | 返回

Powershell | DownloadString | 外部网站 | 返回

我完全是一个 powershell 新手,所以请多包涵 ;)

我正在尝试编写一个脚本,让一台机器检查外部网站,等待单词“测试”以执行下载。事情是这样的:

$Word = 'test'
$WebClientObject = New-Object Net.WebClient
$comment = "http://MySite.wordpress.com/comment_section/"
$WebClientObject.Headers.Add("User-Agent", "Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1667.0 Safari/537.36)")
While($True){
$CommentResult = $WebClientObject.DownloadString($comment)
$Found = $CommentResult.contains($Word)
If($Found) {
IEX $WebClientObject.DownloadString('http://A_Server_That_Is_Accessible/Tasks_to_do')
Task_to_do and some blabla commands
Return
}
Start-Sleep -Seconds 60
}

我正在运行 powershell 2.0。Windows7

发生了什么:

  • 下载不是通过互联网进行的
  • 这不是来自 IP 或路径的问题

我接下来要做的事情:

  • 我直接在 powershell 提示符中写下不同的命令:

-->While($True) 启动一个无限循环而不退出。

为了完成这个技巧,我需要“双击键盘上的返回键”,循环结束,然后最终执行“downloadstring”命令。

还记得我还是个新手吗?:(

  • 我试过“休息” “返回”或者“出口”但无法退出循环。
  • 我也尝试在脚本中输入多次双回车,但都没有成功。

有人可以告诉我如何做这件简单的事情吗......?:)

多谢。

答案1

您的脚本至少存在三个问题:

  1. contains并不像您想象的那样工作。它告诉您参考值集合是否包含单个测试值。通俗地说,它只对数组元素进行操作并寻找精确匹配。但是您得到的$CommentResult是一个包含所有页面 HTML 代码的长字符串。因此contains将 视为具有一个元素的数组,并且由于该元素与字符串“test”不完全匹配,因此它返回False
  2. 在您的if块中,您不必使用Invoke-Expressioncmdlet(IEX是它的别名)来调用DownloadString方法$WebClientObject
  3. 你确实需要做一些 HTML 解析(Html Agility Pack会做),或者至少是一个匹配单词的正则表达式(最好是一个非常唯一字)。因为字符串test本身可以作为标签的一部分出现在 HTML 中,例如:
    <img src='http://server.com/pro测试蚂蚁.jpg' />

我已经修复了你的脚本,使用正则表达式并匹配任何恰好包含字符串的内容test(包括赞成测试测试测试测试安特等等)在网页的 HTML 代码中。尝试一下,然后根据需要进行修改:

$Word = 'test'
$comment = 'http://MySite.wordpress.com/comment_section/'

$WebClientObject = New-Object -TypeName Net.WebClient
$WebClientObject.Headers.Add('User-Agent", "Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1667.0 Safari/537.36)')

While($true)
{
    if($WebClientObject.DownloadString($comment) -match $Word)
    {
        $Html = $WebClientObject.DownloadString('http://A_Server_That_Is_Accessible/Tasks_to_do')
        #Task_to_do and some blabla commands
        break
    }

    Start-Sleep -Seconds 60
}

相关内容