workflow MissingTransactions { $servers = Get-Item "C:\users\m.nielsen\documents\thales\missingtransactions\*" | Where-Object -FilterScript { $_.Attributes -icontains 'directory' } foreach ($s in $servers) { $dates = Get-Item -Path "$($s.FullName)\OutgoingNotProcessed\*" foreach -parallel -throttlelimit 4 ($d in $dates) { InlineScript { $date = $using:d $server = $using:s try { $files = Get-ChildItem -Recurse "$($date.FullName)\rejk-p-mdl003v\dcp_ud" -File Write-Verbose "$($server.Name) - $($date.Name) - Csv Import" $csv = Import-Csv "$($server.FullName)\OutgoingHistory\$($date.Name)\fsv_histooutgoing.txt" -Header ('box name ; file name ; date of arrival ; number of retries ; date of last send info ; date of ack ; row of sending ; current date' -split ' ; ') -Delimiter ';' $dateFormatted = [datetime]::ParseExact($date.Name,'yyyyMMdd', [cultureinfo]::InvariantCulture) $filecount = 0 foreach ($file in $files) { try { Write-Verbose "$($server.Name) - $($date.Name) - $($file.Name)" $filename = $file.Name $result = foreach($entry in $csv) { if($entry.'file name' -match $filename) { $entry } } foreach($entry in $result) { if($entry.'date of ack' -ne $null) { Write-Verbose "$($server.Name) - $($date.Name) - $($file.Name) - It's a match" $foundInSql = 0 [pscustomobject]@{ Filename = $filename DateOfAck = $($entry.'date of ack') FoundInSQL = $foundInSql Server = $server.name Date = $date.Name } } } } catch { Write-Warning "File $($file.Name) failed: $_" } } } catch { Write-Warning "Date $($date.Name) failed: $_" } } } } } $result = MissingTransactions -Verbose $result | Export-Csv csv.csv -Delimiter ';' -NoTypeInformation $csv = import-csv csv.csv -Delimiter ';' $count = 0 $csv2 = foreach($entry in $csv) { $count++ Write-progress -Activity "Finding nonacked" -Status "$count / $($csv.Count)" $matches = foreach($c in $csv) { if($c.filename -eq $entry.filename) { $c } } $isack = $false foreach($m in $matches) { if($m.dateofack -ne 'never positif ack ') { $isack = $true break } } if(-not $isack) { $entry } }