Functions/New-WinSCPTransferOptions.ps1

<#
.SYNOPSIS
    Sets options for file transfers.
.DESCRIPTION
    Sets available options for file transfers between the client and server.
.INPUTS
    None.
.OUTPUTS
    WinSCP.TransferOptions.
.PARAMETER FileMask
    http://winscp.net/eng/docs/file_mask
.PARAMETER FilePermissions
    Permissions to applied to a remote file (used for uploads only).
.PARAMETER State
    Sets what files will be transferred with resume support/to temporary filename. Use TransferResumeSupportState.Default for built-in default (currently all files above 100 KB), TransferResumeSupportState.On for all files, TransferResumeSupportState.Off for no file (turn off) or TransferResumeSupportState.Smart for all files above threshold (see Threshold).
.PARAMETER Threshold
    Threshold (in KB) for State.Smart mode.
.PARAMETER SpeedLimit
     Limit transfer speed (in KB/s).
.PARAMETER PreserveTimeStamp
    Preserve timestamp (set last write time of destination file to that of source file). Defaults to true.
.PARAMETER TransferMode
    Possible values are TransferMode.Binary (default), TransferMode.Ascii and TransferMode.Automatic (based on file extension).
.EXAMPLE
    PS C:\> New-WinSCPTransferOptions -PreserveTimeStamp -TransferMode Binary
 
    PreserveTimestamp : True
    FilePermissions :
    TransferMode : Binary
    FileMask :
    ResumeSupport : default
.EXAMPLE
    PS C:\> New-WinSCPTransferOptions -FilePermissions (New-WinSCPFilePermissions -GroupExecute -OtherRead)
 
    PreserveTimestamp : True
    FilePermissions : -----xr--
    TransferMode : Binary
    FileMask :
    ResumeSupport : default
.NOTES
.LINK
    http://dotps1.github.io/WinSCP
.LINK
    http://winscp.net/eng/docs/library_transferoptions
#>

Function New-WinSCPTransferOptions
{
    [CmdletBinding()]
    [OutputType([WinSCP.TransferOptions])]

    Param
    (
        [Parameter()]
        [ValidateScript({ -not ([String]::IsNullOrWhiteSpace($_)) })]
        [String]
        $FileMask,

        [Parameter()]
        [WinSCP.FilePermissions]
        $FilePermissions,

        [Parameter()]
        [Switch]
        $PreserveTimeStamp,

        [Parameter()]
        [WinSCP.TransferResumeSupportState]
        $State,

        [Parameter()]
        [Int]
        $Threshold,
        
        [Parameter()]
        [Int]
        $SpeedLimit,

        [Parameter()]
        [WinSCP.TransferMode]
        $TransferMode
    )

    Begin
    {
        $transferOptions = New-Object -TypeName WinSCP.TransferOptions

        foreach ($key in $PSBoundParameters.Keys)
        {
            try
            {
                if ($key -eq 'State' -or $key -eq 'Threshold')
                {
                    $transferOptions.ResumeSupport.$($key) = $PSBoundParameters.$($key)
                }
                else
                {
                    $transferOptions.$($key) = $PSBoundParameters.$($key)
                }
            }
            catch [System.Exception]
            {
                throw $_
            }
        }
    }

    End
    {
        return $transferOptions
    }
}