PowerCopy GUI tool leverages the command-line utility Robocopy (Robust File Copy – introduced with Windows Server 2003 Resource Kit).
Robocopy best features include the option to copy file attributes along with the NTFS permissions, mirror the content of an entire folder hierarchy across local volumes or over a network excluding certain file types, copying files above or below a certain age or size, monitor the source location for changes, and giving detailed report with an option to output the status to a log file.
In addition, PowerCopy GUI Tool is making the process easy to configure and control providing ability to set up predefined options, one-click access to help and log file, and instant error analysis.

-supports spaces in the file name
-supports long paths
-shows Robocopy help
-recommended options
-advanced options box
-enable/disable file logging
-generates log file name (current date + source folder name)
-opens the current job logfile in notepad
-parses the current log file and shows the ERROR messages

1.0.1 Updates:
-save preferences function
-stop Robocopy process

To get the progressbar working, the script is retrieving the source file count before initializing the Robocopy process.
This will freeze the tool window until the enumeration is done (in case you copy huge amount of files).

For optimal Robocopy performance, please download the following version:


PowerCopy Home

Q: Do we need to set a specific execution policy to run this script? please guide on how to use?
A: The script is not digitally signed, so you can only run it under Unrestricted execution policy.
Alternatively you can bypass the execution policy currently set on your machine using the following agrument:
powershell.exe -ExecutionPolicy Bypass -File .\PowerCopy.ps1.

To get rid of the security warning message go to PowerCopy.ps1 file properties and UNBLOCK it:

Code snippet:

#Show Errors function 
function showerrors { 
$logfile = $InputLogFile.Text + "\" + ((Get-Date).ToString('yyyy-MM-dd')) + "_" + $InputSource.Text.Split('\')[-1].Replace(" ","_") + ".txt" 
(!(Test-Path $logfile)) {$outputBox.text = "There is no logfile for the current job."else 
{$logcontent = Get-Content $logfile 
if ($errors = $logcontent | Select-String -Pattern "ERROR " -Context 0,1 |Out-String) {$outputBox.text = $errorselse {$outputBox.text = "No errors found."} 
#Stop Robocopy function 
function stoprobocopy { 
if (get-process -Name robocopy -ErrorAction SilentlyContinue) {Stop-Process -Name robocopy -Force 
$timestamp = (Get-Date).ToString('yyyy/MM/dd hh:mm:ss'$outputBox.AppendText("`n`r$timestamp Robocopy process has been terminated.")} 
if ($logfile) { 
Add-Content $logfile "`n`r$timestamp ERROR Robocopy process has been terminated."} 
} #end stop Robocopy function 
#Save Options function 
$Scriptpath = $myInvocation.InvocationName 
Function saveoptions { 
try { 
$saveadvanced = """" + $InputAdvancedOptions.Text.ToString() + """" 
$savelogpath = """" + $InputLogFile.Text.ToString() + """" 
$noerror = $true 
(Get-Content $Scriptpath| ForEach-Object { 
if ($_ | Select-String '^.checkboxS.Checked') {$_ -replace ($_ -split "=")[1].substring(1), $checkboxS.Checked}
This article was originally posted under PowerShell Robocopy GUI Update (PowerCopy 1.0.1)