Powershell Robocopy Log-Aufbereitung für Excel
Mit diesem kleinen Script war es möglich 6000 Log-Files welche durch einzelne Robocopy-Kopiervorgänge erzeugt wurden auszuwerten.
Nach dem Prinzip “short&simple” setzt dieses Skript lediglich auf String replacement, sowie das Splitten von Variablen.
OS:Windows2012R2
#Path to the Log Folder, Logfiles has to be txt $pathtologs = "C:\Robocopy\Logs" #Path to the ReportFolder $exportpath = "C:\Robocopy\Report" function main{ #get all log-files recurse and analyse every file Get-ChildItem $pathtologs -Recurse -Filter "*.txt" -Exclude "Erro*.txt" | foreach { Write-host "Processing $($_.Fullname)" analyse $_.Fullname } $script:myarray = @() function analyse($file) { $input = Select-String -Path $file -Pattern "Robust File Copy for Windows " -AllMatches if ($input.Matches -notlike "") { $regexstart = '(Started : ?)' $Content = Get-Content $input.Path $Fileinhalt=$Dirs=$Started = $Source = $Dest = $Ended = $Speed = $i=$NULL $i = 0 foreach ($line in $Content){ $i++ if ($line -like "*Started :*"){$Started = $line.replace(" Started : ","")} if ($line -like "*Source =*"){$Source = $line.replace(" Source = ","")} if ($line -like "*Dest :*"){$Dest = $line.replace(" Dest : ","")} if ($line -like "*Ended :*"){$Ended = $line.replace(" Ended : ","")} if ($line -like "*Speed :*MegaBytes*"){$Speed = $line.replace("Speed :","").replace(" ","").replace("MegaBytes/min.","")} if ($line -like "*Ended :*"){$Ended = $line.replace(" Ended : ","")} if ($line -like " Dirs :*"){$Dirs = $line.replace(" Dirs : ","").replace(" ",".").replace("..",".").replace("..",".").replace("..",".").replace("..",".")} if ($i -ge 12 -and $line -like "*Files :*"){$Fileinhalt = $line.replace(" Files :","").replace(" ",".").replace("..",".").replace("..",".").replace("..",".").replace("..",".")} if ($line -like "*Bytes :*"){$Bytes = $line.replace(" Bytes :","").replace(" ",";").replace(";;",";").replace(";;",";").replace(";;",";").replace(";;",";").replace(";m"," m").replace(";g"," g").replace(";k"," k")} if ($line -like " Times :*"){$Time = $line.replace(" Times :","").replace(" ",";").replace(";;",";").replace(";;",";").replace(";;",";").replace(";;",";")} if ($line -like " Ended : *"){$Ended = $line.replace(" Ended : ","")} if ($Dirs){ $Dirs= $Dirs.split(".") $Dirs_Total = $Dirs[1] $Dirs_Copied =$Dirs[2] $Dirs_Skipped = $Dirs[3] $Dirs_Mismatch =$Dirs[4] $Dirs_FAILED =$Dirs[5] $Dirs_Extras = $Dirs[6] } if ($Fileinhalt) { $Files= $Fileinhalt.split(".") $Files_Total = $Files[1] $Files_Copied =$Files[2] $Files_Skipped = $Files[3] $Files_Mismatch =$Files[4] $Files_FAILED =$Files[5] $Files_Extras = $Files[6] } if ($Bytes) { $Bytes= $Bytes.split(";") $Bytes_Total = $Bytes[1] $Bytes_Copied =$Bytes[2] $Bytes_Skipped = $Bytes[3] $Bytes_Mismatch =$Bytes[4] $Bytes_FAILED =$Bytes[5] $Bytes_Extras = $Bytes[6] } if ($Time) { $Time= $Time.split(";") $Time_Total = $Time[1] $Time_Copied =$Time[2] } } $script:myarray += New-Object psobject -Property @{ Started = $Started Source = $Source Destination = $Dest Ended=$Ended Speed=$Speed Dirs_Total = $Dirs_Total Dirs_Copied = $Dirs_Copied Dirs_Skipped = $Dirs_Skipped Dirs_Mismatch=$Dirs_Mismatch Dirs_FAILED=$Dirs_FAILED Dirs_Extras=$Dirs_Extras Files_Total = $Files_Total Files_Copied = $Files_Copied Files_Skipped = $Files_Skipped Files_Mismatch = $Files_Mismatch Files_FAILED = $Files_FAILED Files_Extra = $Files_Extras Bytes_Total = $Bytes_Total Bytes_Copied = $Bytes_Copied Bytes_Skipped = $Bytes_Skipped Bytes_Mismatch = $Bytes_Mismatch Bytes_FAILED = $Bytes_FAILED Bytes_Extra = $Bytes_Extras Time_Total = $Time_Total Time_Copied = $Time_Copied } $script:myarray | export-csv "$($exportpath)\overall_$((get-date).ToShortDateString().replace("/","_")).csv" } } main }