.netpowershellftpftpwebrequest

Send arbitrary FTP commands in PowerShell


I've been doing plenty of stuff using PSFTP Module by Michal Gajda

Until I wanted to send arbitrary commands such as :

quote SITE LRECL=132 RECFM=FB

or

quote SYST

I have found that this can't be achieved using FtpWebRequest, but only a third-party FTP implementation.

I want to ask what is the best open source FTP implementation compatible with PowerShell?


Solution

  • You can send an arbitrary FTP command with WinSCP .NET assembly used from PowerShell using the Session.ExecuteCommand method:

    try
    {
        # Load WinSCP .NET assembly
        Add-Type -Path "WinSCPnet.dll"
     
        # Setup session options
        $sessionOptions = New-Object WinSCP.SessionOptions
        $sessionOptions.Protocol = [WinSCP.Protocol]::Ftp
        $sessionOptions.HostName = "example.com"
        $sessionOptions.UserName = "user"
        $sessionOptions.Password = "password"
     
        $session = New-Object WinSCP.Session
     
        try
        {
            # Connect
            $session.Open($sessionOptions)
    
            # Execute command
            $session.ExecuteCommand("SITE LRECL=132 RECFM=FB").Check() 
        }
        finally
        {
            # Disconnect, clean up
            $session.Dispose()
        }
     
        exit 0
    }
    catch [Exception]
    {
        Write-Host $_.Exception.Message
        exit 1
    }
    

    There's also the PowerShell module build on top of WinSCP .NET assembly that you can use like:

    $session = New-WinSCPSessionOptions -Protocol Ftp -Hostname example.com -Username user -Password mypassword | Open-WinSCPSession
    Invoke-WinSCPCommand -WinSCPSession $session -Command "SITE LRECL=132 RECFM=FB"
    

    (I'm the author of WinSCP)