我在远程计算机上运行PowerShell脚本。我将数据写入文本文件,因为它完成了它的工作。一旦完成,它就会写一条特定的行。
我在本地PowerShell脚本中有这个来监视远程机器上的那个文件:
Get-Content -Path $Path -Tail 0 -Wait
它工作得很好,但是一旦达到特定的行,我怎么告诉它停止监控?
我厌倦了将它放入do while循环中,但它永远不会释放以完成do while。
以下是我要问的更简单版本的链接:
How to monitor a text file in realtime
第一个答案是好的,但我不想只寻找一条线。我想将它们全部写为VIA Write-Host直到该短语然后从Get-Content中断并继续使用脚本的其余部分。
这是我最终的结果。由于我退出ForEach-Object的方式,它并不漂亮。
Get-Content -Path $path -Tail 0 -wait | ForEach-Object{if($_ -match $word){write-host "- $_" ;cjklnsrvf } else {write-host "- $_"} }
我在上面if
语句中使用了try和Catch for cjklnsrvf。这样做是因为ForEach-Object不能使用break或continue语句。似乎在管道ForEach循环时,它将转换为(别名)ForEach-Object cmdlet。 ForEach-Object cmdlet不使用break和continue命令,如foreach循环。
如果在ForEach-Object中使用中断,它将立即退出整个脚本。在一个网站上有一个人通过垃圾带来了循环死亡,它确实在这里工作。
答案 0 :(得分:0)
Get-Content $path -Tail 0 -Wait | foreach { if ($_ -eq "Specific Line") { Write-Output $_ ; break } }
或者只是break
,显然,如果您没有使用输出。
答案 1 :(得分:0)
Do {
$content = get-content $path -tail 0 -ea 00 | where {$_ -like "*string found*"}
Sleep -milliseconds 1000
} until($content)
答案 2 :(得分:0)
更新:这是我最终的结果。由于我退出foreach-object的方式,它并不漂亮。
Get-Content -Path $path -Tail 0 -wait | ForEach-Object{if($_ -match $word){write-host "- $_" ;cjklnsrvf } else {write-host "- $_"} }
我在上面的if语句中使用了try和Catch for cjklnsrvf。这样做是因为ForEach-Object不能使用break或continue语句。似乎在管道ForEach循环时,它将转换为(别名)ForEach-Object cmdlet。 ForEach-Object cmdlet不使用break和continue命令,如foreach循环。如果在ForEach-Object中使用break,它将立即退出整个脚本。在一个网站上有一个人通过垃圾带来了循环死亡,它确实在这里工作。
答案 3 :(得分:-1)
Invoke-Command -ComputerName xxx -Credential $cred -ScriptBlock {if(test-path 'c:\1.txt'){cat 'c:\1.txt'}else{'file not exist'}}