使用get-content时只显示更改-wait

时间:2017-03-11 18:35:27

标签: powershell

我创建了以下函数,我想将其用于一个非常简单的CTI解决方案,我必须在工作中使用它。此CTI进程正在将所有已接收的调用写入文本logile。 此函数启动一个新的PowerShell作业并检查.log是否在过去2秒内保存并获取日志的最后4行(接收调用总是创建4个新行)。 在作业更新期间,我使用正则表达式查找带有phonenumber和time的行,并将其附加到表单中的richtextbox。

理论上,这完全符合我的要求。如果我手动添加新行并保存文件,它始终显示时间码和电话号码。 但是,在该字段中,这不起作用,因为CTI进程正在打开文件,除非进程正在关闭,否则不会保存它。

我知道我可以使用get-content -wait来显示新行。我已经在控制台中对此进行了测试,并且只要从CTI进程更新.log就会显示新行。我不知道的是如何重写函数来处理它,在第一次运行脚本时只显示新行而不是所有旧东西。我需要将其保留在工作中以获得响应形式。另一件事是,运行表单的计算机没有那么多的功能。我不知道get-content -wait是否会在几个小时后导致高内存使用量。对于像这样的案例,也许还有一些替代解决方案?

function start-CTIlogMonitoring
{
    Param ($CTIlogPath)

    Write-Debug "startCTI monitor"

    Add-JobTracker -Name "CTILogger" -ArgumentList $CTIlogPath `
                   -JobScript {
        #--------------------------------------------------
        #TODO: Set a script block
        #Important: Do not access form controls from this script block.
        Param ($CTIlogPath) #Pass any arguments using the ArgumentList parameter

        while ($true)
        {
            $diff = ((Get-ChildItem $CTIlogPath).LastWriteTime - (get-date)).totalseconds
            Write-Debug "diff $diff"
            if ($diff -gt -2)
            {
                Write-Debug "cti log DIFF detected"
                Get-Content -Path "$CTIlogPath" -Tail 4
                Start-Sleep -Seconds 1
            }
        }
        #--------------------------------------------------
    }`
                   -CompletedScript { Param ($Job) }`
                   -UpdateScript {
        Param ($Job)
        $results = Receive-Job -Job $Job | Out-String # Out-String required to get new lines in RTB

        #get the stuff from results and make it more appearing to read for humans
        if ($results -match '(Ein, E, (\d+))')
        {
            Write-debug "Incoming Call:"
            $time = ([regex]'[0-9]{2}:[0-9]{2}:[0-9]{2}').Match($results)
            $phoneNumber = ([regex]'Ein, E, (\d+)').Split($results)[1]
            Write-Debug "$time ----> $phoneNumber"
            if ($richtextboxCTIlogs.lines.count -eq 0)
            {
                $richtextboxCTIlogs.AppendText("$time ----> $phoneNumber")
            }
            else
            {
                $richtextboxCTIlogs.AppendText("`n$time ----> $phoneNumber")
            }
            $richtextboxCTIlogs.SelectionStart = $richtextboxCTIlogs.TextLength;
            $richtextboxCTIlogs.ScrollToCaret()
        }
        <#else
        {
            Write-Debug "found nothin"
        }#>
    }
}

0 个答案:

没有答案