Demande d'aide script ftp



  • j’ai trouvé ceci mais ça n’a pas l’air de fonctionner…

    Automatiser des instructions FTP simplement [BAT]
    Etat du script: Fonctionnel

    Présentation:

    Ce script Batch permet à l’aide d’une tâche planifiée, d’envoyer des fichiers déposés dans un dossier vers un serveur FTP distant automatiquement.
    Le principe est le suivant:
    -L’utilisateur dépose les fichiers.
    -Le script envoie les fichier sur le FTP en verbosant ce qu’il se passe.
    -Le script vérifie que tout c’est correctement déroulé. Si c’est le cas, il déplace les fichiers.

    Aucun logiciel ou autre plugin n’est nécessaire au fonctionnement de ce script.
    Un fichier (ftp.dat dans notre exemple) est nécessaire. Il donne les instructions FTP à automatiser. Il doit être présenté de cette façon:

    open %FQDN.SERVER.SUFFIX%
    %LOGIN%
    %PASSWORD%
    binary
    prompt off
    %INSTRUCTIONS FTP%
    %SUR PLUSIEURS LIGNES%
    %SI VOUS VOULEZ%
    bye 
    

    Le script:

    @echo off
    rem Envoi FTP automatique
    rem Version 0.1 20091208 by Clockover
    
    rem Variables
    set source=C:\source (Dossier contenant les fichiers à envoyer) 
    set archive=C:\archive (Dossier qui contiendra les fichiers envoyés)
    set logs=C:\logs (Dossier qui contient les logs de connexion)
    set config=C:\FTP\ftp.dat (Fichier contenant les instructions FTP)
    
    rem On se met dans le répertoire de travail
    cd %source%
    
    rem Execution de l'envoi FTP + log par jour de la connexion
    ftp -s:%config% >> %logs%\%date:~6,4%%date:~3,2%%date:~0,2%.txt
    
    rem Vérification de la dernière ligne des logs
    for /f "delims=" %%a in ('type %logs%\%date:~6,4%%date:~3,2%%date:~0,2%.txt') do set "last_line=%%a"
    exit
    

    je dois surement pas faire ce qu’il faut !!!


  • Manchot Adélie

    @Melissia Je regarde ça dans le week, je vais avoir un peu de temps.



  • @the-worm-s a dit dans Demande d'aide script ftp :

    @Melissia Je regarde ça dans le week, je vais avoir un peu de temps.

    Je te remercie c’est très gentil



  • re

    en faisant mes recherches j’ai réussit à faire un script Powershell
    les copies vers le FTP se font bien, fichiers dossiers ainsi que sous dossiers.

    Par contre je n’ai toujours pas la synchronisation qui fait que si dans mon dossier je rajoute ou modifie 1 fichier, le script ne me copie que celui -ci.

    La mon script recopie tout… et moi j’ai besoin d’un synchronisation du fait que le client possèdent trop de dossiers et sous dossiers.

    Quelqu’un sait -il comment faire pour modifier le script ?

    en vous remerciant d’avance.

    $user = "FTP USER"
    $password = "FTP PASSWORD"
    $localdir = "DOSSIER SOURCE"
    $ftpdir = "DOSSIER DESTINATAIRE"
    $client = New-Object System.Net.WebClient 
    $client.Credentials = New-Object System.Net.NetworkCredential($user,$password) 
    $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();
    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)
        }
    exit
    

  • Manchot Adélie

    Moi qui allais monter 2 VM de windows. :afond:

    C’est cool que tu ais réussi à trouver déjà le début du script.

    Après le powershell euh… je ne pourrais t’aider.

    je peux juste te partager ce script de backup incrementiel :

    <#
    
    .SYNOPSIS
      Powershell script to backup files older than N days.
      
    .DESCRIPTION
      This PowerShell script is for taking incremental backups of files modified in the last N days from the specified source to destination folder.
      
    .PARAMETER <source>
       Source location where the files should be copied from.
    
    .PARAMETER <destination>
       Target location where the files should be copied to.
        
     .PARAMETER <N days>
       Only files modified in the last N days will be copied.
     
    .NOTES
      Version:        1.0
      Author:         Open Tech Guides
      Creation Date:  11-Jan-2017
     
    .LINK
        www.opentechguides.com
        
    .EXAMPLE
      FileBackup c:\source-folder d:\dest-folder 30
       
    #>
    
    Param(
      [Parameter(Mandatory=$true, position=0)][string]$source,
      [Parameter(Mandatory=$true, position=1)][string]$destination,
      [Parameter(Mandatory=$true, position=2)][Int]$days
    )
    
    $src = $source.toLower()
    $dest = $destination.toLower()
    
    Write-Host "File backup started."
    Write-Host "Source: " $src 
    Write-Host "Destination: " $dest 
    Write-Host "Policy: Files older than" $days "days"
    
    Write-Host "Scanning files ..."
    
    $FilesToCopy = Get-ChildItem $src -force -recurse| where-object {($_.LastWriteTime -gt (Get-Date).AddDays(-$days))  -and  ($_.PSIsContainer -ne $True)}
    
    Write-Host "Scanning completed."
    
    Write-Host "Copying files..."
    $count = 0
    Foreach($File in $FilesToCopy)
    
    {
        $src_file = $File.Fullname.tolower()
        $dst_file = $File.Fullname.tolower().replace($src, $dest)
        $dst_dir = Split-path -path $dst_file
     
         if (!(Test-Path -path $dst_dir) ) {
           Write-Host "`t Create directory " $dst_dir
           New-Item -path $dst_dir -type Directory | out-null
        }
        
        
        Copy-Item $src_file -Destination $dst_file
        $count++
    }
    
    Write-Host "File copy completed."
    Write-Host $count "file(s) copied."
    
    Write-Host "File backup completed."
    

    si tu combine les 2, tu devrais réussir ton script :ok:



  • The Worm’s je te remercie je regarde ce que je peux faire.


  • Manchot Adélie

    alors @Melissia tu t’en es sortie ?



  • Bonjour,

    je ne trouve toujours pas pour faire la synchronisation… ça me copie toujours tous les fichiers…


  • Manchot Adélie

    Même avec le script qui scan la date des fichiers que je t’ai partagé ci-dessus ?

    Voici un script qui scanne si un fichier image est existant, si c’est le cas il l’envoi, je pense que tu peux l’intégrer :
    https://github.com/edouardkombo/PowerShellFtp/blob/master/script.ps1

    Ou encore celà : https://www.example-code.com/powershell/ftp_syncRemoteTree.asp



  • j’essai de voir
    ms comme les scripts sont pas tout a fait pareil, c difficile a placer

    En tt cas jte remercie bcp