Powershell“一行”用于控制台中的Get-Content和Beep

Powershell“一行”用于控制台中的Get-Content和Beep

我喜欢 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}}

相关内容