从文本中获取特定值并插入数组,然后对其进行比较

时间:2014-02-28 10:52:37

标签: arrays powershell powershell-v2.0 powershell-v3.0

我是Powershell的新手,我正在尝试制作一个脚本,以便提取一些数据,然后启动一个命令。 这是交易: 我有一个应用程序,有时会出错(我必须查看日志文件)与特定的错误代码(总是相同),并在同一行我有一个“ID”,IDT。

所以我的问题是: 我必须每隔5分钟查看一次这个日志文件,然后搜索错误代码 CFTT82E ,并在此行中获取我的IDT值,这是数字,这里看起来像这样的行: / p>

14/01/15 12:20:06 CFTT82E transfer aborted IDTU=A0009L7Q PART=DGISSL IDF=LKEMDDIB IDT=A1512489 730 ABO 215>

一旦我得到变量中的值,我必须等待5分钟,然后使用我的IDT的值启动命令,也就是说:

cmd -toto $IDT_value

现在,一旦命令成功(我只需要与 CFTR12I 代码和我的IDT值进行比较),我会得到一条消息:

14/01/15 15:48:39 CFTR12I END Treated for USER Système PART=DGISSL IDF=* IDT=A1512489>

此时,我将退出,否则,我将重新启动相同的命令。

但是,由于这个脚本应该每隔5分钟在Loop中工作,下次我将解析日志文件时,我应该忽略之前已经使用过的IDT。 我想用每日IDT值创建一个数组(在日期结束时我们可以清空数组或变量或该对象将是什么)然后比较每个循环的值。

我已经开始这样了但是因为我是新手,我认为我没有一个好的开始:

clear
Get-Content C:\CFT\LOG2014011523590001 |

foreach { 

$line = $_.Trim()

If ($line.Contains('CFTT82E')) {

    $str = $line.Split(' ')

    $TIDT = [ordered]@{

        IDT  = $_.SubString(101)

    }

    New-Object PsObject -Property $TIDT
    }
} | Out-String 

我知道我问了很多但是,欢迎提出任何建议。

1 个答案:

答案 0 :(得分:0)

这可能会对你有所帮助。创建一个ArrayList以查找存储的值,然后查看您的文件。如果IDT不在列表中,请使用IDT执行某些操作,然后将其添加到列表中,以便在后续运行时将其忽略。

$list = New-Object System.Collections.ArrayList

while (1) {

    $content = get-content "C:\your\file.txt"

    foreach ($line in $content) {
        if ($line -match "CFTT82E.*IDT=(.+?)\b.*") {
            $idt = $matches[1]
            if(!$list.contains($idt) {
                #
                # Do whatever you need to do with $idt
                # 
                $list.add($idt)
            }
        }
    }
    sleep -Seconds(5*60)
}