Share via


File Backup with PowerShell

Backing up files is easy with PowerShell. We need the file copy command and task scheduler command. We can complete the process with Robocopy and a new task.

A simple code example for Robocopy

robocopy.exe <SourceDestination> <TargetDestination> /mir /mt:96 /r:3 /w:3 /np /ts /bytes /xd > c:\log.txt
information for robocopy parameters
/mir tells robocopy to use mirror mode
/mt:96 maximum of allowed threads increasing or decreasing this results in different end-times
/r:3 maximum set retry count
/w:3 maximum set wait time before a retry is executed
/np shows no progress
/ts include the timestamp of the source file
/bytes display progress in bytes for easy calculation
/xd $exclude exclude files that set in the "$exclude" variable
> c:\log.text export log.txt


We use the New-ScheduledTaskAction command to create a task. 

For example 

New-ScheduledTaskAction -Execute "PowerShell.exe"
So we use the New-ScheduledTaskTrigger command to scheduled a task. 

New-ScheduledTaskTrigger -At 10:00am –Daily

Let's write our ps script

$Trigger= New-ScheduledTaskTrigger -At 10:00am –Daily $User= "NT AUTHORITY\SYSTEM" $Action= New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "robocopy.exe <SourceDestination> <TargetDestination> /mir /mt:96 /r:3 /w:3 /np /ts /bytes /xd > c:\log.txt" Register-ScheduledTask -TaskName "test" -Trigger $Trigger -User $User -Action $Action -RunLevel Highest –Force
Let's test 

Step 1: creating two folders 

Soruce destination C:\a
Target destination C:\b

Step 2: I'm uploading test files to the "a" folder.


Step 3: editing my code in source ande target destinations

$Trigger= New-ScheduledTaskTrigger -At 10:00am –Daily $User= "NT AUTHORITY\SYSTEM" $Action= New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "robocopy.exe C:\a C:\b /mir /mt:96 /r:3 /w:3 /np /ts /bytes /xd > c:\log.txt" Register-ScheduledTask -TaskName "test" -Trigger $Trigger -User $User -Action $Action -RunLevel Highest –Forc    

Test all PS script

PS C:\Users\Administrator\Desktop> $Trigger= New-ScheduledTaskTrigger -At 10:00am -Daily
PS C:\Users\Administrator\Desktop> $User= "NT AUTHORITY\SYSTEM"
PS C:\Users\Administrator\Desktop> $Action= New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "robocopy.exe C:\a C:\b /mir /mt:96 /r:3 /w:3 /np /ts /bytes /xd > c:\log.txt"
PS C:\Users\Administrator\Desktop> Register-ScheduledTask -TaskName "test" -Trigger $Trigger -User $User -Action $Action -RunLevel Highest -Force
 
TaskPath                                       TaskName                          State
--------                                       --------                          -----
\                                              test                              Ready
 
 
PS C:\Users\Administrator\Desktop>
PS C:\Users\Administrator\Desktop>
PS C:\> dir
 
 
    Directory: C:\
 
 
Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----       28.06.2019     11:21                a
d-----       28.06.2019     12:14                b
d-----       15.09.2018     10:19                PerfLogs
d-r---       27.06.2019     15:42                Program Files
d-----       20.06.2019     09:24                Program Files (x86)
d-r---       12.06.2019     07:38                Users
d-----       21.06.2019     13:42                Windows
-a----       28.06.2019     12:14           2494 log.txt
 
 
PS C:\>
PS C:\> cd a
PS C:\a> dir
 
 
    Directory: C:\a
 
 
Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----       28.06.2019     11:21                New folder
d-----       28.06.2019     11:21                New folder (2)
d-----       28.06.2019     11:21                New folder (3)
d-----       28.06.2019     11:21                New folder (4)
-a----       28.06.2019     11:21              0 New Text Document (2).txt
-a----       28.06.2019     11:21              0 New Text Document (3).txt
-a----       28.06.2019     11:21              0 New Text Document.txt
 
 
PS C:\a> cd..
PS C:\> cd b
PS C:\b> dir
 
 
    Directory: C:\b
 
 
Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----       28.06.2019     11:21                New folder
d-----       28.06.2019     11:21                New folder (2)
d-----       28.06.2019     11:21                New folder (3)
d-----       28.06.2019     11:21                New folder (4)
-a----       28.06.2019     11:21              0 New Text Document (2).txt
-a----       28.06.2019     11:21              0 New Text Document (3).txt
-a----       28.06.2019     11:21              0 New Text Document.txt
 
 
PS C:\b> cd..
PS C:\>

Hopefully, it has been a useful solution.