我喜欢 Get-Content 命令,尤其是-泰土地-等待参数...
但是,如果我可以编写一个“单行程序”让它在新条目出现时发出哔声,我会更加高兴。
我尝试过使用管道和“foreach”,但似乎找不到正确的组合。我不想写多行脚本。但对于出现的每个新行 - 都会发出哔哔声。
"[console]::beep(500,300)"
"Get-Content '\\server\share\file.txt' -tail 10 -wait"
有任何想法吗?
答案1
这只会检查行数,并且仅当行数增加时才会发出蜂鸣声。
$LineCount = 0
Get-Content -Path 'D:\Temp\BeepOnAddLine.txt' -tail 10 -wait |
ForEach-Object{
If ($LineCount -lt [Linq.Enumerable]::Count([System.IO.File]::ReadLines('D:\Temp\BeepOnAddLine.txt')))
{
[console]::beep(500,300)
$LineCount = [Linq.Enumerable]::Count([System.IO.File]::ReadLines('D:\Temp\BeepOnAddLine.txt'))
}
}
当然,你可以用分号把这些都放到一行代码里,但我们知道这不是真正的一行代码。这很难阅读、调试等。
$LineCount = 0;Get-Content -Path 'D:\Temp\BeepOnAddLine.txt' -tail 10 -wait | ForEach-Object{If ($LineCount -lt [Linq.Enumerable]::Count([System.IO.File]::ReadLines('D:\Temp\BeepOnAddLine.txt'))) {[console]::beep(500,300);$LineCount = [Linq.Enumerable]::Count([System.IO.File]::ReadLines('D:\Temp\BeepOnAddLine.txt'))}}
# A bit shorter using aliases and no .Net namespace, but well, you know.
$FP='D:\Temp\BeepOnAddLine.txt';$LC=0;gc $FP -tail 10 -wait|%{If ($LC -lt (gc $FP|measure -Line).Lines){[console]::beep(500,300);$LC=(gc $FP|measure -Line).Lines}}