15/11/2024

PowerShell

Comment se connecter à un serveur FTP avec PowerShell ?

I. Présentation

Je ne dois pas être le seul à vouloir me connecter à serveur FTP à l'aide de PowerShell, je me suis dis que ça pouvait être intéressant de partager avec vous comment faire. Il existe différentes méthodes, pour ma part je me suis orienté vers le module PSFTP, il est disponible directement sur PowerShell Gallery.

Dans ce tutoriel, nous allons installer le module PSFTP et l'utiliser notamment pour effectuer un transfert de fichiers FTP avec PowerShell, après avoir établie une connexion.

Documentation du module : PSFTP

Pour rappel, FTP signifie File Transfer Protocol c'est-à-dire un protocole de transfert de fichiers, il écoute par défaut sur le port 21 notamment pour la réception des connexions et commandes, et le port 20 pour les données. Très répandu encore aujourd'hui, il dispose d'une déclinaison sécurisée avec le FTPS où les connexions seront chiffrées.

II. Installer le module FTP pour PowerShell

A partir d'une console PowerShell, installez le module à partir de la PowerShell Gallery directement :

Install-Module PSFTP

Lors de l'installation acceptez les demandes d'autorisation. Vous pouvez ensuite importer le module afin de pouvoir l'utiliser :

Import-Module PSFTP

Si tout est OK, alors vous pouvez continuer 🙂

III. Connexion à un FTP avec PowerShell

Il faut que l'on paramètre notre connexion FTP avec notamment l'adresse du serveur et les identifiants. D'ailleurs, pour les identifiants vous pouvez créer un objet pour les stocker si vous le souhaitez, dans le cas présent une pop-up s'affichera afin de vous inviter à saisir le mot de passe.

Ces paramètres de connexion sont très important car une connexion mal établie vous empêchera de réaliser les transferts de fichiers par la suite. Le paramètre "ignoreCert" permet d'ignorer l'avertissement s'il s'agit d'un FTP non sécurisé (non FTPS), et les paramètres "UseBinary" et "KeepAlive" permettent respectivement de changer le mode de transfert de données et de maintenir la connexion.

Vous remarquerez la présence du paramètre "Session" suivi de la valeur "FloFTP", ceci est très important car en fait on va nommer avec un nom personnalisé cette session FTP. Ce qui veut dire que l'on peut monter plusieurs sessions en simultanées : une flexibilité intéressante ! Si vous ne précisez pas ce paramètre, le nom par défaut sera utilisé : DefaultFTPSession

Ci-dessous la commande pour monter la connexion FTP :

Set-FTPConnection -Credentials itconnect -Server 192.168.1.200:2100 -Session FloFTP -ignoreCert -UseBinary -KeepAlive

Maintenant, on va stocker notre session "FloFTP" dans la variable $Session. Ceci va permettre d'utiliser cette session dans les commandes qui vont suivre.

$Session = Get-FTPConnection -Session FloFTP

La connexion étant montée, on va pouvoir manipuler les données !

IV. Lister, télécharger et charger des fichiers

Le cmdlet "Get-FTPChildItem" va permettre de lister les données contenues dans les différents répertoires du FTP. Pour lister les données de la racine, on utilisera cette commande on réutilisant notre session en cours :

Get-FTPChildItem -Session $Session -Path "/"

Pour lister avec récursivité à partir du chemin précisé dans "Path", on ajoutera le paramètre "Recurse" :

Get-FTPChildItem -Session $Session -Path "/" -Recurse

Maintenant, imaginons que l'on veut récupérer un fichier du FTP pour le télécharger sur notre PC en local. On utilisera le cmdlet "Get-FTPItem" où l'on va préciser la source (Path) et la destination (LocalPath). L'option "Verbose" vous permettra de suivre de plus près l'évolution des transferts.

Pour télécharger le fichier test.txt du dossier "doc" sur le FTP vers le dossier local "C:\Temp\ftp" on utilisera cette commande :

Get-FTPItem -Path "/doc/test.txt" -LocalPath C:\Temp\ftp -Session $Session -Verbose

Ce qui donne :

COMMENTAIRES : Opération « Download item: '/test.txt' » en cours sur la cible «  ».
226 Téléchargement terminé

Je ne sais pas pourquoi le nom de la cible est vide dans le commentaire, surement un bug car ça fonctionne quand même. Si vous souhaitez recréer l'arborescence sur la destination, ajoutez le paramètre "-RecreateFolders".

On sait comment lister le contenu du FTP, comment télécharger des données, il reste à voir comment envoyer un fichier vers le serveur FTP en PowerShell.

On peut coupler l'utilisation de Get-ChildItem et de Add-FTPItem pour envoyer tout le contenu d'un dossier vers le FTP. On pourrait très bien ajouter un filtre intermédiaire pour n'envoyer que certains fichiers, en fonction de l'extension par exemple.

Voici un exemple :

Get-ChildItem "C:\Temp\ftp" | Add-FTPItem -Session $Session -Path /doc/

Si vous souhaitez tout simplement charger un fichier spécifique vers le FTP, c'est possible aussi. Cette fois-ci on précisera le paramètre "LocalPath" au cmdlet "Add-FTPItem" pour indiquer le fichier source. Par exemple :

Add-FTPItem -Session $Session -Path "/doc/-LocalPath "C:\Temp\ftp\local-excel.xlsx"

Voilà, vos données sont arrivées sur votre serveur FTP 😉 . Il est à noter que pour le moment il n'y a pas de commande pour fermer la connexion FTP.

J'espère que ce tutoriel sera utile pour vos futurs scripts, n'hésitez pas à poster un commentaire si vous avez une question ou une remarque.

author avatar
Florian BURNEL Co-founder of IT-Connect
Ingénieur système et réseau, cofondateur d'IT-Connect et Microsoft MVP "Cloud and Datacenter Management". Je souhaite partager mon expérience et mes découvertes au travers de mes articles. Généraliste avec une attirance particulière pour les solutions Microsoft et le scripting. Bonne lecture.
Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Envoyer par mail

6 commentaires sur “Comment se connecter à un serveur FTP avec PowerShell ?

  • Bonjour,

    merci pour cette article. Il faut quel version de powershell minium?
    Car impossible d’installer sur un serveur 2012 R2 en version powershell 4.0

    Répondre
    • Bonjour,

      Est-ce que tu as essayé de faire une installation manuelle pour voir ?

      Florian

      Répondre
    • Bouh ! Powershell me semble bien compliqué par rapport à quelques commandes bash :
      FTP user@server
      Get leNomDuFichier

      Répondre
  • Bonjour,

    Merci pour ce tuto mais pour une connexion sftp il y aurait un tuto ?

    Répondre
  • Bonjour,

    Possibilité de changer le port par défaut de la connexion en ftp? Je souhaiterais me connecter depuis powershell sur un serveur ftp en 2121 mais j’ai tenté de mettre le port avec « : » après l’adresse ip du serveur, mais ça ne fonctionne pas. J’ai aussi essayé le « -port » dans la commande Set-FTPConnection mais rien non plus 🙁

    Merci d’avance

    Répondre
  • Super, ça marche nickel.
    Maintenant, une fois que la connexion fonctionne, comment envoyer les fichiers d’un répertoire sur le ftp?

    Merci!

    Répondre

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.