
This article has not been completed yet. However, it may already contain helpful information and therefore it has been published at this stage.
Introduction:
Posh-SSH Module:
# Installing Posh Module
Write-Host "Installing the Posh-SSH Module" -ForegroundColor Green
install-module posh-ssh

# Show all available module commands
Write-Host "Listing all Posh-SSH - Commands..." -ForegroundColor Green
Get-Command -Module Posh-SSH
CommandType Name Version Source
----------- ---- ------- ------
Function Get-PoshSSHModVersion 2.3.0 Posh-SSH
Function Get-SFTPChildItem 2.3.0 Posh-SSH
Function Get-SFTPContent 2.3.0 Posh-SSH
Function Get-SFTPLocation 2.3.0 Posh-SSH
Function Get-SFTPPathAttribute 2.3.0 Posh-SSH
Function Get-SFTPSession 2.3.0 Posh-SSH
Function Get-SSHPortForward 2.3.0 Posh-SSH
Function Get-SSHSession 2.3.0 Posh-SSH
Function Get-SSHTrustedHost 2.3.0 Posh-SSH
Function Invoke-SSHCommand 2.3.0 Posh-SSH
Function Invoke-SSHCommandStream 2.3.0 Posh-SSH
Function Invoke-SSHStreamExpectAction 2.3.0 Posh-SSH
Function Invoke-SSHStreamExpectSecureAction 2.3.0 Posh-SSH
Function Invoke-SSHStreamShellCommand 2.3.0 Posh-SSH
Function Move-SFTPItem 2.3.0 Posh-SSH
Function New-SFTPFileStream 2.3.0 Posh-SSH
Function New-SFTPItem 2.3.0 Posh-SSH
Function New-SFTPSymlink 2.3.0 Posh-SSH
Function New-SSHDynamicPortForward 2.3.0 Posh-SSH
Function New-SSHLocalPortForward 2.3.0 Posh-SSH
Function New-SSHRemotePortForward 2.3.0 Posh-SSH
Function New-SSHShellStream 2.3.0 Posh-SSH
Function New-SSHTrustedHost 2.3.0 Posh-SSH
Function Remove-SFTPItem 2.3.0 Posh-SSH
Function Remove-SFTPSession 2.3.0 Posh-SSH
Function Remove-SSHSession 2.3.0 Posh-SSH
Function Remove-SSHTrustedHost 2.3.0 Posh-SSH
Function Rename-SFTPFile 2.3.0 Posh-SSH
Function Set-SFTPContent 2.3.0 Posh-SSH
Function Set-SFTPLocation 2.3.0 Posh-SSH
Function Set-SFTPPathAttribute 2.3.0 Posh-SSH
Function Start-SSHPortForward 2.3.0 Posh-SSH
Function Stop-SSHPortForward 2.3.0 Posh-SSH
Function Test-SFTPPath 2.3.0 Posh-SSH
Cmdlet Get-SCPFile 2.3.0 Posh-SSH
Cmdlet Get-SCPFolder 2.3.0 Posh-SSH
Cmdlet Get-SCPItem 2.3.0 Posh-SSH
Cmdlet Get-SFTPFile 2.3.0 Posh-SSH
Cmdlet Get-SFTPItem 2.3.0 Posh-SSH
Cmdlet New-SFTPSession 2.3.0 Posh-SSH
Cmdlet New-SSHSession 2.3.0 Posh-SSH
Cmdlet Set-SCPFile 2.3.0 Posh-SSH
Cmdlet Set-SCPFolder 2.3.0 Posh-SSH
Cmdlet Set-SCPItem 2.3.0 Posh-SSH
Cmdlet Set-SFTPFile 2.3.0 Posh-SSH
Cmdlet Set-SFTPFolder 2.3.0 Posh-SSH
Cmdlet Set-SFTPItem 2.3.0 Posh-SSH
# Connecting to the SFTP - Server
Write-Host "Connecting..." -ForegroundColor Green
New-SFTPSession -Computername 127.0.0.1



C:\SFTP\tom
# Creating a txt file on SFTP server
Write-Host "Creating file..." -ForegroundColor Green
New-SFTPItem -SessionId 0 -Path "/SFTP/tom/test2.txt" -ItemType file

# List subdirectory files on SFTP server
Write-Host "Listing files..." -ForegroundColor Green
Get-SFTPChildItem -SessionId 0 -Path "/SFTP/tom/"

# Download file to client
Write-Host "Download file to client" -ForegroundColor Green
Get-SFTPFile -SessionId 0 -RemoteFile /SFTP/tom/Test.txt -LocalPath c:\temp

# Upload file to SFTP server
Write-Host "Upload file to SFTP server" -ForegroundColor Green
Set-SFTPFile -SessionId 0 -LocalFile c:\temp\TestIII.txt -RemotePath /SFTP/tom -Overwrite:$true

WinSCP
Installing the Assembly
First, you need to install the WinSCP .NET assembly. In most cases, all you need to do is download the WinSCP-X.X.X-Automation.zip
package and extract it along with your PowerShell script.




cd c:\temp
# Install WinSCP Module
Install-Module -Name WinSCP
Get-Command -Module WinSCP
CommandType Name Version Source
----------- ---- ------- ------
Alias Close-WinSCPSession 5.17.10.0 WinSCP
Alias Enter-WinSCPSession 5.17.10.0 WinSCP
Alias Exit-WinSCPSession 5.17.10.0 WinSCP
Alias Open-WinSCPSession 5.17.10.0 WinSCP
Function ConvertTo-WinSCPEscapedString 5.17.10.0 WinSCP
Function Copy-WinSCPItem 5.17.10.0 WinSCP
Function Get-WinSCPChildItem 5.17.10.0 WinSCP
Function Get-WinSCPHostKeyFingerprint 5.17.10.0 WinSCP
Function Get-WinSCPItem 5.17.10.0 WinSCP
Function Get-WinSCPItemChecksum 5.17.10.0 WinSCP
Function Get-WinSCPSession 5.17.10.0 WinSCP
Function Invoke-WinSCPCommand 5.17.10.0 WinSCP
Function Move-WinSCPItem 5.17.10.0 WinSCP
Function New-WinSCPItem 5.17.10.0 WinSCP
Function New-WinSCPItemPermission 5.17.10.0 WinSCP
Function New-WinSCPSession 5.17.10.0 WinSCP
Function New-WinSCPSessionOption 5.17.10.0 WinSCP
Function New-WinSCPTransferOption 5.17.10.0 WinSCP
Function New-WinSCPTransferResumeSupport 5.17.10.0 WinSCP
Function Receive-WinSCPItem 5.17.10.0 WinSCP
Function Remove-WinSCPItem 5.17.10.0 WinSCP
Function Remove-WinSCPSession 5.17.10.0 WinSCP
Function Rename-WinSCPItem 5.17.10.0 WinSCP
Function Send-WinSCPItem 5.17.10.0 WinSCP
Function Start-WinSCPConsole 5.17.10.0 WinSCP
Function Sync-WinSCPPath 5.17.10.0 WinSCP
Function Test-WinSCPPath 5.17.10.0 WinSCP
# Set credentials to a PSCredential Object.
$credential = Get-Credential





$sshHostKeyFingerprint = "ssh-ed25519 255 5c:ff:36:de:0e:ae:97:b7:4d:5d:90:51:3c:c3:f9:b3"
$sessionOption = New-WinSCPSessionOption -HostName localhost -SshHostKeyFingerprint $sshHostKeyFingerprint -Credential $credential

$session = New-WinSCPSession -SessionOption $sessionOption

# Using the WinSCPSession, download the file from the remote host to the local host.
Receive-WinSCPItem -WinSCPSession $session -Path "/SFTP/tom/TestIII.txt" -Destination "C:\temp\"

Get-WinSCPChildItem -WinSCPSession $session -Path "/SFTP/tom/"

Send-WinSCPItem -WinSCPSession $session -Path 'C:\temp\TestIII.txt' -Destination '/SFTP/tom/Test4.txt'

New-WinSCPItem -WinSCPSession $session -Path '/SFTP/tom/' -Name 'TextFile.txt' -ItemType File -Value 'Hello World!'

Close-WinSCPSession -WinSCPSession $session

Sources:
WinSCP
WinSCP PowerShell Wrapper Module.
Using WinSCP .NET Assembly from PowerShell :: WinSCP
WinSCP is a free SFTP, SCP, Amazon S3, WebDAV, and FTP client for Windows.

SSH und SFTP mit der PowerShell
Building PowerShell Tools for MSPs: Using SFTP