Dans cet article nous allons apprendre l'utilisation et l'importance de WinSCP .Net Assembly et COM library.
Introduction
Nous sommes habitué à utiliser le client WinSCP pour se connecter sur un serveur SFTP,SCP ou FTP. Il existe même un module très basique appelé WinSCP.com pour envoyer ou réceptionner des données via un fichier *.bat. Cependant, beaucoup d'entre nous ignore l'existance de WinSCP .Net Assembly et COM library qui offre la possibilité de manipuler des fichiers à distance depuis un environnement supportant .NET, par exemple C#,VB. Net, PowerShell,SSIS et même depuis les sites MS AZURE.
WinSCP .Net assembly et COM library offrent beaucoup de possibilité en termes de ligne de commandes pour automatiser l'envoi et la réception de fichier depuis un serveur FTP,SCP ou sFTP.
Prérequis
Télécharger le fichier zip indiqué ci-dessous et décompresser le.
Exemple de programmation en PoSH
- L'initialisation d'une connexion sur un serveur
try
{
# appel WinSCP .NET assembly
Add-Type -Path "WinSCPnet.dll"
# paramètre de connexion
$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
try
{
# initialiser la connexion
$session.Open($sessionOptions)
Write-Host "You are now connected!!!"
}
finally
{
# Déconnecter et nettoyer
$session.Dispose()
}
exit 0
}
catch [Exception]
{
# Exception
Write-Host ("Error: {0}" -f $_.Exception.Message)
exit 1
}
Pour se connecter sur un serveur sFTP avec une clé privée et sans login et mot de passe, remplacer la ligne :
Password = "mypassword"
SshHostKeyFingerprint = "ssh-rsa 2048 xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx"
par
SshPrivateKeyPath = "chemin vers la clé privée"
GiveUpSecurityAndAcceptAnySshHostKey = "true"
Pour télécharger un fichier avec son nom, utiliser la ligne de commande ci-dessous:
$session.GetFiles($session.EscapeFileMask(<chemin complet du fichier>), <destination locale>).Check()
# Upload files
$transferOptions = New-Object WinSCP.TransferOptions
$transferOptions.TransferMode = [WinSCP.TransferMode]::Binary
$transferResult = $session.PutFiles("d:\toupload\*", "/home/user/", $False, $transferOptions)
Pour avoir plus d'informations sur les classes existantes : https://winscp.net/eng/docs/library