Powershell | DownloadString | 外部网站| 返回

我是一个完全PowerShell新手,所以请放纵;)

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

$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。 Windows 7的

发生了什么:

  • 下载不通过互联网执行
  • 这不是来自IP或path的问题

接下来我做了什么:

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

– > While($ True)在不退出的情况下启动一个无限循环。

为了使窍门我需要“双击键盘上的返回”,循环的结束和“下载string”命令终于执行。

还记得我不只是一个新手,对吧? 🙁

  • 我试图“rest” “返回”“退出”不可能退出循环。
  • 我试图把我的脚本中的许多双回车还没有成功。

请有人指示我做这个简单的事情的方式…? 🙂

非常感谢。

你的脚本至less有三个问题:

  1. contains不按照您认为的方式工作。 它告诉参考值的集合是否包含单个testing值。 用外行人的话来说,它只对数组的元素进行操作并寻找完全匹配。 但是,您在$CommentResult获得的是一个包含所有页面的HTML代码的长string。 因此, contains treats是一个数组与一个元素,因为这个元素不是一个完全匹配的string“testing”,它返回False
  2. 在您的if块中,您不必使用Invoke-Expression cmdlet( IEX是它的别名)来调用$WebClientObject DownloadString方法。
  3. 你真的需要做一些HTMLparsing(Html Agility Pack 会这样做 ),或者至less一个正则expression式匹配一个单词(最好是一个非常独特的单词)。 因为stringtest本身可以作为标签的一部分出现在HTML中,例如:
      <img src =' http: //server.com/pro test ant.jpg'/> 

我已经修复了你的脚本使用正则expression式并且匹配任何东西,恰好包含了在网页的HTML代码中的stringtest (这包括专业testingtestingtestingtesting等等)。 之后尝试并修改您的需求:

 $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 }