A long, long time ago (back in 2008) I created a VBS script which would analyze a folder filled with Robocopy logs and once done analyzing and creating a summary, it would mail the result to me.
A couple of days ago I decided it was time to update this script to Powershell. Once I was finished, I still wasn’t satisfied with its speed (neither was I with the VBS version of the script, but since it ran nightly I didn’t bother changing it). Since I was working on it, I thought I’d completely rewrite it and increase its speed some, together with making it more diverse, so I can use it in more situations and depending on the needed notification settings for each specific situation. Since Microsoft decided to default add Robocopy to the OS, I’ll be using it a lot more myself. I also checked the internet if others created something similar, I found some, but none could compete with what I just created and/or had the diversity I needed; thus thought I’d share it.
I tested this script on Powershell 2.0 and 4.0, so should also work with 3.0. If not, please contact me and I can update/change it. (also include the error please)
Ok, so what does this script? It will read the contents of all robocopy log files in the specified path. If you add -recurse, it’ll also include subfolders. Depending on your settings, it’ll create a summary file with either a summary of all found log files, only the ones with errors and warnings or only the ones with errors. Depending if you want warnings and/or errors, it’ll add detailed information about the errors it found in all the log files. The detailed information for errors will be placed in the top of the summary file. The output file will be placed in the directory the script is started from. Depending on your settings it’ll send an e-mail report with a summary of the analyzed logs and the summary file (with detailed error and/or warning info) will be attached to this mail.
After I finished creating the script, I also added detailed help information and tested its speed.
Reading of 110 files (95,8MB), which consist of 7 errors in 4 files and 402924 warnings in 4 files;
Running time: 2m8s
Tested with option SummaryAll (maximum output) and a MaxLinesPerFile of 500 (thus 2007 lines (500 per warnings file) to write)
Same conditions as above, but tested with SummaryAllWithoutWarnings (thus only 7 lines to write)
Running time: 20s
The Robocopy settings I use (I also use this to make copties of files that can be open by users in their desktop session, that’s why I excluded the ~$ temporary excel files in this script, otherwise you’d get false-positive errors)
robocopy "<source>" "<target>" /XD "<folder>" /XF "~$*.xls" "~$*.xlsx" "~$*.xlsm" /E /V /NP /LOG:"<Path\Logfile>" /R:2 /W:2
Getting eager to try it out yourself? The complete powershell script can be found here: AnalyzeRobocopyLogs.ps1
Use Get-Help .\AnalyzeRobocopylogs.ps1 to get default help information about the script and
Use Get-Help .\AnalyzeRobocopylogs.ps1 -full to get detailed information about the script
If you use this script change it or provide it to / share it with others, please comment me and/or link to my blog.
The E-mail message will look something like this:
Edit: Updated the script. It appeared that Powershell v2 had an issue with the summary text. This has been updated in the AnalyzeRobocopyLogs v2.1 script.
Hi there and welcome to my Powershell blog. I’ve always loved scripting to automate things or to make things easier. Now that I’ve encountered Powershell, I fell in love with it. Through this blog I hope to spread the love 😉
But seriously, Powershell is a great way to automate things. Even when you’re no expert, it’s not hard to learn it’s basics… and since it’s always nice to be the creator of something, why not give Powershell a try?
To me, the great thing about Powershell is that it keeps amazing me in its possibilities, I love that it works cross-platform and can connect and run things on connected computers as well, just like the fact that it can be found on nearly any computer.