PowerShell: Synchronizing a Folder (and Sub-Folders) Part 1

There are plenty of commercially available systems for synchronizing the contents of two folders (I’ve used Allway Sync a bit and it works well).  But what if you just want to quickly sync a folder (and sub-folders) to another location using PowerShell?

Ideally I’d want it to take a source folder and synchronize it to a target folder with any missing content being recreated.  If the target folder is already populated, I’d want to update any newer versions of the files and remove anything that has been deleted from the source.

The script (and a breakdown on how it works) follows after the line.

Update : I’ve revisited this script a few times with new additions and modifications.The latest full version of the script is here.  That post also includes links covering the other revisions to the script.

Continue reading “PowerShell: Synchronizing a Folder (and Sub-Folders) Part 1”

PowerShell: Synchronizing a Folder (and Sub-Folders)

This is the latest version of my PowerShell folder synchronisation script.

I’ve revisited this script a few times with new additions and modifications.  If you want explanations about how the script was developed over time or how parts of the script work, have a look at the following posts;

Part 1 covers the basic script to sync two folders.

Part 2 adds the ability to specify exceptions that the sync process will skip.

In part 3 I added an XML configuration file so more complicated processes can be run.

I customised and validated parameter input (parameter sets) and added some proper error checking in part 4.

The script was updated to deal with non-standard paths and to output objects reporting on the changes it made in part 5.

In part 6 I add more use of literal paths (to prevent path errors) and generate statistics.

I add a filter option, turn strict-mode on and optimise the statistics generation in part 7 (plus fix a bug!).

In part 8 I’ve added some validity checks on the XML configuration file.

WhatIf functionality was added in Part 9 plus some corrections to make sure Filter and Exceptions worked correctly.

In Part 10 I added text file logging.

In Part 11 I fixed an odd bug where $Nulls were being added to arrays and added a -PassThru switch.

Part 12 covers some fixes for behaviour and adding the ability to support  multiple target folders (so the source folders can be synced to multiple locations).

Part 13 added more control over what gets logged and how, added a timestamp to the log filename, creating a new log on each run, code cleanup and some bug- fixes.

A zipped version of the script is here;

Continue reading “PowerShell: Synchronizing a Folder (and Sub-Folders)”

HOTAS (Joystick + Throttle) Comparison

As part of the long list of preparations for the release of Elite : Dangerous I decided it was time to get a new HOTAS system.  Hands On Throttle And Stick means exactly what it says;  a joystick and throttle with so many buttons you don’t need to take your hands off to fiddle with the keyboard.  They can be expensive bits of kit, but after a lot of searching and reading I settled on getting the CH Fighterstick and CH Throttle.

This post will break down why I went for the CH and I’ll do a follow-on post about what I think about the HOTAS system itself.

Continue reading “HOTAS (Joystick + Throttle) Comparison”

PowerShell : Comparing Contents of Two Folders

Someone at work asked me if I knew a quick way in PowerShell to compare the contents of two folders. I asked a few questions and it turned out he was trying to rationalize all the music folders he had scattered round on his families computers. He wanted a way to look at all the files in a folder and check if an identical file (by identical he meant the same size) was present in a second folder.

I quickly thrashed out a line which he later said did the trick;

gci c:\source | %{$Found=$false;foreach($Item2 in $(
gci d:\target)){if($_.Name -eq $Item2.Name -and
$_.Length -eq $Item2.Length){$Found=$true}};
if (-not $Found){"$($_.Name) not matched."}}

Explanation about how it works below the line.
Continue reading “PowerShell : Comparing Contents of Two Folders”