enum State { Started Finished Failed } function GetVMName { param ( [string]$Rest ) $tokens = $Rest -split "'" return $tokens[1] } function ConvertDate { param ( [string]$DateString ) return [DateTime]$DateString } function DeterminState { param ( [String]$Rest ) if($Rest.IndexOf("Erfolgreiche") -cge 0){ return 'Finished' } elseif ($Rest.IndexOf("gestartet") -cge 0) { return 'Started' } else { return 'Failed' } } function ProduceHashMap { param ( $Elements ) $HashTable =@{} foreach ($elem in $Elements){ $indexOfFirst = $elem.IndexOf(" ") if($indexOfFirst -le 0){ continue } $date = $elem.SubString(0,$elem.IndexOf(" ",($indexOfFirst + 1))) $timeStamp = ConvertDate($date) $rest = $elem.Substring($elem.IndexOf(" ",($indexOfFirst + 1))+1) $vmName = GetVMName($rest) $backUpState = DeterminState($rest) if($HashTable.ContainsKey($vmName)){ $array = $HashTable[$vmName] $array += New-Object psobject -Property @{ state = $backUpState ts = $timeStamp } $HashTable[$vmName]=$array } else{ $HashTable += @{$vmName=@(New-Object psobject -Property @{ state = $backUpState ts = $timeStamp })} } } $HashTable } $lines = Get-Content -Path .\log.txt | ForEach-Object {$_.SubString($_.IndexOf(":")+1)} $elems = $lines | Out-String -Stream | Select-String -Pattern "VMware-Maschine" | Out-String -Stream ProduceHashMap($elems) <#$HashTable =@{} foreach ($elem in $Elems){ $indexOfFirst = $elem.IndexOf(" ") if($indexOfFirst -le 0){ continue } $date = $elem.SubString(0,$elem.IndexOf(" ",($indexOfFirst + 1))) $timeStamp = ConvertDate($date) $rest = $elem.Substring($elem.IndexOf(" ",($indexOfFirst + 1))+1) $vmName = GetVMName($rest) $backUpState = DeterminState($rest) if($HashTable.ContainsKey($vmName)){ $array = $HashTable[$vmName] $array += New-Object psobject -Property @{ state = $backUpState ts = $timeStamp } $HashTable[$vmName]=$array } else{ $HashTable += @{$vmName=@(New-Object psobject -Property @{ state = $backUpState ts = $timeStamp })} } } $HashTable#>