2015-12-29 5 views
-1

У меня есть сценарий PowerShell, запущенный на удаленной машине. У меня есть запись данных в текстовый файл, когда он завершает свою работу. После этого он записывает определенную строку.Powershell для мониторинга текстового файла

У меня есть это в локальном сценарии PS контролировать этот файл на удаленном компьютере:

Get-Content -Path $Path -Tail 0 -Wait 

Это работает замечательно, но как я могу сказать, что это, чтобы остановить мониторинг один раз, что конкретная линия будет достигнута?

Я устал вкладывать его в цикл do while, но он никогда не выпускает, чтобы закончить работу.

Вот ссылка на более простую версию того, что я спрашиваю:

How to monitor a text file in realtime

Первый ответ хорош, но я не хочу, чтобы просто посмотреть на определенную линию я хочу написать их все VIA-записи-хосты до этой фразы затем перейдут с get-content и продолжат работу с оставшимися частями скрипта.

ОБНОВЛЕНИЕ: вот что я, наконец, закончил. Это не очень из-за того, как я вышел из объекта foreach.

Get-Content -Path $path -Tail 0 -wait | ForEach-Object{if($_ -match $word){write-host "- $_" ;cjklnsrvf } else {write-host "- $_"} } 

Я использовал Try and Catch для cjklnsrvf в выражении if выше. Это делается потому, что ForEach-Object не может использовать инструкции break или continue. Кажется, что при конвейере цикла ForEach он превращается в (псевдоним) командлет ForEach-Object. Командлет ForEach-Object не использует команды break и continue, как цикл foreach. Если вы используете разрыв в объекте ForEach-Object, он немедленно выйдет из всего скрипта. На одном сайте был один парень, который вызвал гибель мусора, и он действительно работает здесь.

Благодаря тем, которые помогли. и остальное .. хорошо .. вы знаете

+0

Сделайте это 2 голосов. Переполнение стека не является кодировкой. Ослепите сообщество тем, что вы уже пробовали, и тем, что вы исследовали. Зачем кому-то писать ваш код для вас, если вы не проявляете никаких усилий с вашей стороны, чтобы решить свою проблему? – dfundako

+0

, потому что я не могу поделиться кодом! Мне пришлось бы потратить три часа, чтобы переписать его только для того, чтобы вы его увидели, и тогда это не будет делать то, что я делаю. Это просто, что у меня есть сценарий, записывающий данные в файл, мне нужно его прочитать, пока он доходит до определенной строки ... Нет документации по -tail или -wait и piping, если инструкции не работают ... – reddragon72

ответ

-1
Invoke-Command -ComputerName xxx -Credential $cred -ScriptBlock {if(test-path 'c:\1.txt'){cat 'c:\1.txt'}else{'file not exist'}} 
+0

http://stackoverflow.com/questions/5203730/cut-off-text-in-string-after-before-seperator-in-powershell –

0
Get-Content $path -Tail 0 -Wait | foreach { if ($_ -eq "Specific Line") { Write-Output $_ ; break } 

или просто break, очевидно, что если у вас нет никакой пользы на выходе.

+0

Это то, что у меня есть ..... Get-Content -Path $ path -Tail 0 -wait | ForEach-Object {if ($ _ -match $ word) {write-host "- $ _"; continue} else {write-host "- $ _"}} .... он отлично работает, но оба ломаются, и продолжить выход из всего скрипта. – reddragon72

+0

Вправо! Я не думаю, что вы упоминали о продолжении запуска скрипта изначально .. но опять же, имеет смысл, чтобы что-то действительно произошло, как только эта конкретная строка будет найдена. Мне нужен мой сон. : P – notjustme

+0

Да, сценарий больше. Также был найден еще один парень, который управлял простой строкой, не прокладывая нитки, но это немного покончено с этим. Также обратите внимание, как я вышел из трубы, очень странно, что MS оставила там эту «ошибку». Спасибо за ваш вклад, хотя он помог укрепить то, куда я направлялся. – reddragon72

0
Do{ 
$content = get-content $path -tail 0 -ea 00 | where {$_ -like "*string found*"} 
Sleep -milliseconds 1000 
}until($content) 
+0

У меня было что-то подобное, но я не мог использовать его, потому что файл, на который написан, может иметь 10 строк, добавленных за полсекунды, а затем никаких строк в течение более минуты. Он выполняет проверки системы, и каждый чек изменяется по длине и почему я отправился на инструкцию -wait – reddragon72

0

ОБНОВЛЕНИЕ: вот что я, наконец, закончил. Это не очень из-за того, как я вышел из объекта foreach.

Get-Content -Path $path -Tail 0 -wait | ForEach-Object{if($_ -match $word){write-host "- $_" ;cjklnsrvf } else {write-host "- $_"} } 

Я использовал Try and Catch для cjklnsrvf в выражении if выше. Это делается потому, что ForEach-Object не может использовать инструкции break или continue. Кажется, что при конвейере цикла ForEach он превращается в (псевдоним) командлет ForEach-Object. Командлет ForEach-Object не использует команды break и continue, как цикл foreach. Если вы используете разрыв в объекте ForEach-Object, он немедленно выйдет из всего скрипта. На одном сайте был один парень, который вызвал гибель мусора, и он действительно работает здесь.

Смежные вопросы