Public/Rename-WinSCPItem.ps1

function Rename-WinSCPItem {

    [CmdletBinding(
        HelpUri = "https://github.com/dotps1/WinSCP/wiki/Rename-WinSCPItem"
    )]
    [OutputType(
        [Void]
    )]

    param (
        [Parameter(
            Mandatory = $true,
            ValueFromPipeline = $true
        )]
        [ValidateScript({ 
            if ($_.Opened) { 
                return $true 
            } else { 
                throw "The WinSCP Session is not in an Open state."
            }
        })]
        [WinSCP.Session]
        $WinSCPSession,

        [Parameter(
            Mandatory = $true
        )]
        [String]
        $Path,

        [Parameter(
            Mandatory = $true
        )]
        [String]
        $NewName,

        [Parameter()]
        [Switch]
        $PassThru
    )

    process {
        try {
            $item = Get-WinSCPItem -WinSCPSession $WinSCPSession -Path (Format-WinSCPPathString -Path $($Path)) -ErrorAction Stop
            
            if ($NewName -contains "/" -or $NewName -contains "\") {
                $NewName = $NewName.Substring(
                    $NewName.LastIndexOfAny(
                        "/\"
                    )
                )
            }

            $parentPath = (Split-Path -Path $item.FullName -Parent).Replace(
                "\", "/"
            )
            $newPath = $WinSCPSession.CombinePaths(
                $parentPath , $NewName
            )

            $WinSCPSession.MoveFile(
                $item.FullName, $newPath
            )

            if ($PassThru.IsPresent) {
                Get-WinSCPItem -WinSCPSession $WinSCPSession -Path $newPath
            }
        } catch {
            $PSCmdlet.WriteError(
                $_
            )
        }
    }
}