2015-12-29 112 views
-1

我有一個運行在遠程機器上的PowerShell腳本。我已經將數據寫入文本文件,因爲它完成了它的工作。一旦完成,它會寫入一個特定的行。Powershell監視文本文件

我有這個在當地PS腳本監視遠程機器上的文件:

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

這是偉大的工作,但我怎麼告訴它停止監視,一旦達到特定行?

我厭倦了把它變成一個while while循環,但它永遠不會釋放以完成這個操作。

這裏是一個鏈接的簡化版本什麼我問:

How to monitor a text file in realtime

第一個答案是好的,但我不想只是看一定行我想給他們寫所有VIA write-host直到該短語從獲取內容中斷開並繼續執行腳本的剩餘部分。

更新:這是我終於結束了。由於我退出foreach對象的方式並不美觀。

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

我在上面的if語句中使用了Try和Catch作爲cjklnsrvf。這是因爲ForEach-Object不能使用break或continue語句。看起來,在管道ForEach循環時,它會變成(別名)ForEach-Object cmdlet。 ForEach-Object cmdlet不像foreach循環那樣使用break和continue命令。如果您在ForEach-Object中使用中斷,它將立即退出整個腳本。在一個網站上有一個人通過垃圾引發循環死亡,並且確實也在這裏工作。

感謝那些幫助。和休息..好..你知道

+0

讓它2倒票。堆棧溢出不是一種編碼服務。用你已經嘗試過的和你研究過的東西炫耀社區。當你沒有表現出任何努力來解決你自己的問題時,爲什麼其他人應該爲你寫代碼? – dfundako

+0

因爲我無法分享代碼!我將不得不花三個小時重寫它,只是爲了讓你看到它,然後它不會做我正在做的事情。這很簡單,我有一個腳本將數據寫入文件,我需要讀取它,直到它到達特定行....沒有關於-tail或-wait和管道的文檔,如果語句不工作... – 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 $路徑-Tail 0 -wait | ForEach-Object {if($ _ -match $ word){write-host「 - $ _」; continue} else {write-host「 - $ _」}} ....它工作的很好,但都打破,退出,並繼續退出整個腳本。 – reddragon72

+0

好的!我認爲你沒有提到任何有關最初繼續運行腳本的內容......但是,再次說明,一旦找到特定的行,事情就會發生。我需要我的睡眠。 :P – notjustme

+0

是的腳本還有更多。另外還發現了另一個在線程中沒有管道而運行普通線路的人,但僅僅爲此而已完成了一些工作。還要注意我是如何退出管道的,很奇怪的是MS在那裏留下了那個「bug」。感謝您的意見,因爲它有助於鞏固我前進的方向。 – 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 "- $_"} } 

我在上面的if語句中使用了Try和Catch作爲cjklnsrvf。這是因爲ForEach-Object不能使用break或continue語句。看起來,在管道ForEach循環時,它會變成(別名)ForEach-Object cmdlet。 ForEach-Object cmdlet不像foreach循環那樣使用break和continue命令。如果您在ForEach-Object中使用中斷,它將立即退出整個腳本。在一個網站上有一個人通過垃圾引發循環死亡,並且確實也在這裏工作。