Accueil > Powershell > Transfert vers un serveur FTP avec Powershell

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.

?View Code POWERSHELL
#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)
    }

.

Categories: Powershell Tags: , ,

Vous avez aimé cet article ? Alors partagez-le en cliquant sur les boutons ci-dessous :


Twitter Facebook Google Plus Linkedin

Article rédigé par Christophe Bluteau.

  1. Giova
    22/10/2013 à 10:53 | #1

    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 ..

  2. 22/10/2013 à 22:07 | #2

    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

  3. julien microbuzz
    14/02/2014 à 09:48 | #3

    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

  4. 14/03/2015 à 18:31 | #4

    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

  1. Pas encore de trackbacks