Transfert vers un serveur FTP avec Powershell

Voici un script PowerShell qui permet de transférer un dossier vers un serveur FTP.
Ce script upload le dossier avec tous les sous dossiers et les fichiers.

#Compte ftp
$user = "guest"
#Mot de passe du compte ftp
$password = "Powershell"
#Dossier source
$localdir = "C:\Scripts\"
#Dossier destination
$ftpdir = "ftp://ftp.server.com/uploads/"

$client = New-Object System.Net.WebClient 
$client.Credentials = New-Object System.Net.NetworkCredential($user,$password) 

#Debut de la partie création du dossier distant a mettre en remarque si le dossier existe déjà.
$parentfolder = $localdir.split("\")[-1]
Write-Host "Création de $parentfolder"
$makedir = [System.Net.WebRequest]::Create($ftpdir+$parentfolder);
$makedir.Credentials = New-Object System.Net.NetworkCredential($user,$password) 
$makedir.Method = [System.Net.WebRequestMethods+FTP]::MakeDirectory;
$makedir.GetResponse();
#Fin de la partie création du dossier distant


foreach($item in Get-ChildItem -recurse $localdir){ 

    $filename = [system.io.path]::GetFullPath($item.FullName).SubString([system.io.path]::GetFullPath($localdir).Length + 1)

    if ($item.Attributes -eq "Directory"){

        try{
            Write-Host "Création de $item.Name"

            $makedir = [System.Net.WebRequest]::Create($ftpdir+"/"+$parentfolder+"/"+$filename);
            $makedir.Credentials = New-Object System.Net.NetworkCredential($user,$password) 
            $makedir.Method = [System.Net.WebRequestMethods+FTP]::MakeDirectory;
            $makedir.GetResponse();

            }
            catch [Net.WebException] {
            Write-Host $item.Name probably exists ...
            }

            continue;
        }

        Write-Host "Transfert de $item..."
        $file = New-Object System.Uri($ftpdir+"/"+$parentfolder+"/"+$filename) 
        $client.UploadFile($file, $item.FullName)
    }

.

6 réflexions sur « Transfert vers un serveur FTP avec Powershell »

  1. Giova

    Bonjour ,

    je suis étudiant..
    et durant ma période de stage on ma demander d’accomplir la tache
    ellaborer un script en powershell qui upload un dossier en ftp ..
    je pense que votre script repond bien a cette tache mes manque de connaissance je n’arrive pas a l’adapter serai t’il possible de le commenter pour savoir les paramètres a changer .. :-s

    je vous remercie dans l’attente de votre réponse ..

    Répondre
  2. Christophe Bluteau Auteur de l’article

    Bonjour,

    Il n’y a que les 4 premières valeurs à changer.
    Il va uploader tous les fichiers présents dans $localdir dans le dossier $ftpdir du serveur FTP. Il va même créer les sous-dossiers si nécessaire.
    Si le dossier $ftpdir n’existe pas, il va le créer.

    A+

    Christophe

    Répondre
  3. julien microbuzz

    Bonjour à tous et merci pour ce script qui fonctionne nickel!

    Je cherche à l’adapter pour, qu’après un premier upload d’un répertoire complet sur le ftp, n’envoyer que les nouveaux fichiers ainsi que ceux qui sont modifiés. (Plus récents ou taille changée).
    Après des recherche sur google et dans le support powershell, je ne trouve pas la fonction qui permet de lire le fichier sur le ftp et de le comparer avec le fichier local. Je suppose que je dois repasser par une boucle for englobante avec un test sur le fichier (local/distant) if -eq ???.

    Si une âme charitable repasse par ici.
    Bonne journée

    Répondre
  4. barzek

    Bonjour,

    Merci pour ce script. Par contre savez vous comment passer ne mode passif?

    A priori mon serveur le demande

    Exception lors de l’appel de « UploadFile » avec « 2 » argument(s) : « Le serveur distant a retourné une erreur : 227 Entering Passive Mode (213,186,33,201,147,120)

    Merci

    Répondre
  5. Windosien

    Bonjour,

    Lorsque je veux le transférer vers le ftp en externe en question je ne vois aucun dossier créer mon serveur est une CentOS 7.

    Merci

    Répondre
  6. Melissia

    Bonjour à tous

    comme julien microbuzz Je cherche à l’adapter pour, qu’après un premier upload d’un répertoire complet sur le ftp, n’envoyer que les nouveaux fichiers ainsi que ceux qui sont modifiés. (Plus récents ou taille changée).
    Est ce possible ?

    en vous remerciant

    cordialement

    Répondre

Laisser un commentaire

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