我有一個腳本從日誌文件列表中提取一些值。 每個值都插入到一個數組中。通過多個陣列合併同一行的每個元素
在腳本結尾,我想將每個數組的每一行組合起來,並將它們導出到一個excel文件中。
這裏是腳本:
while (1) {
clear
$list = New-Object System.Collections.ArrayList
$list2 = New-Object System.Collections.ArrayList
$list3 = New-Object System.Collections.ArrayList
$list4 = New-Object System.Collections.ArrayList
$dir_to_look = "C:\test"
$30_days_backdate=$(Get-Date).Adddays(-30) ####pour tester
$contenu = Get-childitem $dir_to_look -recurse LOG20* |where { $_.lastwritetime -gt $30_days_backdate }| Get-Content
############### Fichier log du jour
foreach ($line in $contenu) {
if ($line -match "CFTT82E.*IDT=(.+?)\b.*") {
$str = $line.Split(' ')
$props = [ordered]@{
Heure = $str[2]
Date = $str[1] ############ Heure où le message est apparu ######################
}
$heure_plantage=$str[2]
$date_du_plantage=$str[1]
$idt = $matches[1]
if(!$list.contains($idt)){
if ($line -match "CFTT82E.*PART=(.+?)\b.*") { ############### Récuperrer le nom_du_partner #################
$part = $matches[1]
}
$list.add($idt)
$list2.add($heure_plantage)
$list3.add($part)
$list4.add($date_du_plantage)
$conver=$list4 |Foreach-Object {$_ -replace "([0-9]+)/+([0-9]+)/+([0-9]+)", '$3-$2-$1'} # conversion date en EU
}
}
}
###visual test of the array values
write-host "$list"
write-host "$list2"
write-host "$list3"
write-host "$conver"
break }
這些陣列的輸出是這個(可能包含更多的值在每個line.I只剩四個值爲這個問題的目的):
A1512201 A1512204 A1512203 A1512205
12:20:06 12:20:08 12:20:16 12:20:25
TOTO TITI DPFDDFL PACKA
15-01-14 12-03-14 13-03-14 13-03-14
所以,我想有正確的順序如下輸出:
DATE HOUR IDT PARTNER
15-01-14 12:20:06 A1812201 TOTO
12-03-14 12:20:08 B1212204 TITI
13-03-14 12:20:16 A1912203 DPFDDF
13-03-14 12:20:25 A2012205 PACKA
任何建議是歡迎,
預先感謝您。
恕我直言,你需要重新編程,編寫這個來創建自定義對象而不是數組列表。那麼你會有一些適合輸出的東西。 – mjolinor
雖然(1)是無價的。 – EBGreen
我的問題解決了。我在腳本上做了很多修改,現在它可以正常工作。 謝謝 – user3364384