Connect to multiple servers in one powershell script
I'm learning powershell and also am new to OOP.
If I wanted to download from one SFTP server and upload to a second server in the same script, would this be the general idea (below)?
Is there a better way to do this?
Thank you.
If I wanted to download from one SFTP server and upload to a second server in the same script, would this be the general idea (below)?
Is there a better way to do this?
Thank you.
try { # Load WinSCP .NET assembly Add-Type -Path "WinSCPnet.dll" # Setup session options $sessionOptions = New-Object WinSCP.SessionOptions -Property @{ Protocol = [WinSCP.Protocol]::Sftp HostName = "example.com" UserName = "user" Password = "mypassword" SshHostKeyFingerprint = "ssh-rsa 2048 xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx" } $session = New-Object WinSCP.Session $sessionOptions_second_server = New-Object WinSCP.SessionOptions -Property @{ Protocol = [WinSCP.Protocol]::Sftp HostName = "example2.com" UserName = "user2" Password = "mypassword" SshHostKeyFingerprint = "ssh-rsa 2048 xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx" } $session_second_server = New-Object WinSCP.Session try { # Connect to download from server 1 $session.Open($sessionOptions) # Download files $transferOptions = New-Object WinSCP.TransferOptions $transferOptions.TransferMode = [WinSCP.TransferMode]::Binary $transferResult = $session.GetFiles("/home/user/*", "d:\download\", $False, $transferOptions) # Throw on any error $transferResult.Check() # Print results $files_downloaded = 0 foreach ($transfer in $transferResult.Transfers) { Write-Host ("Download of {0} succeeded" -f $transfer.FileName) $files_downloaded++ } if ($files_downloaded) { # Connect to upload to server 2 $session_second_server.Open($sessionOptions_second_server) # Upload files $transferOptions_second_server = New-Object WinSCP.TransferOptions $transferOptions_second_server.TransferMode = [WinSCP.TransferMode]::Binary $transferResult_second_server = $session_second_server.PutFiles("d:\download\*", "/home/user/", $False, $transferOptions_second_server) # Throw on any error $transferResult_second_server.Check() # Print results foreach ($transfer in $transferResult.Transfers) { Write-Host ("Upload of {0} succeeded" -f $transfer.FileName) } } } finally { # Disconnect, clean up $session.Dispose() $session_second_server.Dispose() } exit 0 } catch [Exception] { Write-Host ("Error: {0}" -f $_.Exception.Message) exit 1 }