Public/Invoke-Robocopy.ps1

function Invoke-Robocopy {
    <#
.DESCRIPTION
This is a wrapper function that provides preset robocopy options using parameter sets and supports running with no presets.
 
.PARAMETER Source
Source directory from which files are being copied from
 
.PARAMETER Target
The target directory for copied files
 
.PARAMETER Arguments
Any combination of robocopy parameters that can be passed to the NoPreset paremeterset, or any prepopulated parametersets
 
.PARAMETER MirrorSync
Specifies that you wish to use the MirrorSync preset options for the Robocopy job
 
.PARAMETER NoPreset
Specifies that you will be providing your own parameter set for the Robocopy Job
 
.PARAMETER NoPurgeSync
Specifies that you wish to use the NoPurgeSync preset options for the Robocopy job
 
.EXAMPLE
The NoPresets parameter set allows for specifying all arguments in any combination that is preferred.
 
$Arguments = @("/mir", "/copyall", "/r:1", "/w:1", "/zb", "/E")
$Arguments | Invoke-Robocopy -Source c:\temp -Target c:\test -nopreset
 
or
 
Invoke-Robocopy -Nopreset -Source c:\temp -Target c:\test -Arguments "/mir", "/copyall", "/r:1", "/w:1", "/zb", "
 
.EXAMPLE
Default set of parameters for mirroring directories with permissions and purging files that no longer exist at the source.
#Command run is equal to <Robocopy.exe $Source $Target /mir /COPY:DATSO /r:1 /w:1 /zb $Arguments>
 
Invoke-Robocopy -Source c:\temp -Target c:\test -MirrorSync
 
.EXAMPLE
Default set of parameters for mirroring directories with permissions without purging files that no longer exist at the source.
#Command run is equal to <Robocopy.exe $Source $Target /e /COPY:DATSO /r:1 /w:1 /zb $Arguments>
 
Invoke-Robocopy -Source c:\temp -Target c:\test -NoPurgeSync
#>


    [cmdletbinding()]

    param (
        [Parameter(Mandatory = $true, Position = 1, ParameterSetName = 'MirrorSync')]
        [Parameter(Mandatory = $true, Position = 1, ParameterSetName = 'NoPreset')]
        [Parameter(Mandatory = $true, Position = 1, ParameterSetName = 'NoPurgeSync')]
        $Source,
        [Parameter(Mandatory = $true, Position = 2, ParameterSetName = 'MirrorSync')]
        [Parameter(Mandatory = $true, Position = 2, ParameterSetName = 'NoPreset')]
        [Parameter(Mandatory = $true, Position = 2, ParameterSetName = 'NoPurgeSync')]
        $Target,
        [Parameter(Mandatory = $true, ParameterSetName = 'NoPreset')][switch]
        $Nopreset,
        [Parameter(Mandatory = $false, ValueFromPipeline = $true, ParameterSetName = 'MirrorSync')]
        [Parameter(Mandatory = $false, ValueFromPipeline = $true, ParameterSetName = 'NoPreset')]
        [Parameter(Mandatory = $false, ValueFromPipeline = $true, ParameterSetName = 'NoPurgeSync')]
        $Arguments,
        [Parameter(Mandatory = $true, ParameterSetName = 'MirrorSync')][switch]
        $MirrorSync,
        [Parameter(Mandatory = $true, ParameterSetName = 'NoPurgeSync')][switch]
        $NoPurgeSync
    )

    #Check For Admin Privleges
    Get-Elevation


    if ($nopreset) {
        Robocopy.exe $Source $Target $Arguments
    }

    if ($MirrorSync) {
        Robocopy.exe $Source $Target /mir /COPY:DATSO /r:1 /w:1 /zb $Arguments
    }

    if ($NoPurgeSync) {
        Robocopy.exe $Source $Target /E /COPY:DATSO /r:1 /w:1 /zb $Arguments
    }
}