Arrays 从文本中获取特定值并插入到数组中,然后对其进行比较
我是Powershell的新手,我正在尝试编写一个脚本来提取一些数据,然后启动一个命令。 交易如下: 我有一个有时出错的应用程序,我必须在日志文件中查找特定的错误代码始终相同,在同一行中我有一个ID,IDT 所以我的问题是: 我必须每5分钟查看一次该日志文件,搜索错误代码CFTT82E,并在这一行中获取我的IDT值,该值为数字,如下所示: 15年1月14日12:20:06 CFTT82E传输中止IDTU=A0009L7Q部分=DGISSL IDF=LKEMDDIB IDT=A1512489 730 ABO 215> 在变量中获得值后,我必须再等待5分钟,然后使用IDT的值启动命令,也就是说: cmd-总计$IDT\U值 现在,一旦命令成功,我只需与CFTR12I代码和IDT值进行比较,我将得到如下消息: 2015年1月14日15:48:39 CFTR12I为用户系统处理的端部零件=DGISSL IDF=*IDT=A1512489> 此时,我将退出,否则,我将重新启动相同的命令 但是,由于这个脚本应该每5分钟循环一次,下次解析日志文件时,我应该忽略我以前已经使用过的IDT。 我想在日期结束时用每日IDT值创建一个数组,我们可以清空数组或变量,或者这个对象是什么,然后比较每个循环的值 我已经开始了,但由于我是新手,我认为我没有一个好的开始:Arrays 从文本中获取特定值并插入到数组中,然后对其进行比较,arrays,powershell,powershell-2.0,powershell-3.0,Arrays,Powershell,Powershell 2.0,Powershell 3.0,我是Powershell的新手,我正在尝试编写一个脚本来提取一些数据,然后启动一个命令。 交易如下: 我有一个有时出错的应用程序,我必须在日志文件中查找特定的错误代码始终相同,在同一行中我有一个ID,IDT 所以我的问题是: 我必须每5分钟查看一次该日志文件,搜索错误代码CFTT82E,并在这一行中获取我的IDT值,该值为数字,如下所示: 15年1月14日12:20:06 CFTT82E传输中止IDTU=A0009L7Q部分=DGISSL IDF=LKEMDDIB IDT=A1512489 73
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
我知道我问了很多问题,但欢迎提出任何建议。这可能会对您有所帮助。创建用于查找存储值的ArrayList,然后查看文件。如果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)
}
嘿,arco444,谢谢你的回答。我的问题是如何分割IDT值,将其插入变量或数组中,然后应用上述循环。然后,一旦循环中的命令成功,在下一次执行时,将此IDT从我的研究中排除,这样它就不会使用相同的IDT再次运行该命令。我希望现在它更清晰。再次感谢你,你是最棒的。脚本工作得很好,但是如果我的命令不能工作,也就是说,我有第二个代码CFTR12I代码和IDT值,我必须重新运行该命令。因此,一旦命令执行,我还必须验证与我在命令中运行的IDT相关联的CFTR12I代码。否则,剧本就是伟人!!再次感谢大家!!!