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



  • @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
    


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



  • alors @Melissia tu t’en es sortie ?



  • Bonjour,

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



  • 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



  • Je ne trouve vraiment pas la solution pour envoyer que les nouveaux fichiers ainsi que ceux qui sont modifiés, plus récents ou taille changée.



  • Envoi ton script voir si on peut t’aider 😏



  • J’ai bien une solution mais je pense pas que basculer sur du GNU/Linux soit envisageable :diable:



  • text alternatif



  • Mon script est celui que j’ai mis plus haut . Je le redonne :

    $user = "USER"
    $password = "PASS FTP"
    $localdir = "D:\jess\notices"
    $ftpdir = "ftp://ftp.cluster026.hosting.ovh.net/www/Test/"
    $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)
        }
    pause
    

    Et non passer sous GNU/Linux n’est pas envisageable. Le client veut que cela fonctionne sous windows server…

    En vous remerciant



  • j’ai trouver ceci :

    Compare-Object $(dir $srcDir | where{$_.PSIsContainer}) $(dir $targetDir | where{$_.PSIsContainer}) | where {$_.SideIndicator -eq "<="} | select -First 1 | % { $currentFolder=$_.InputObject; Invoke-Expression -Command $robocopyCommand }
    

    le problème c’est que je ne sais pas comment l’intégrer à mon script…

    Quelqu’un à une idée ?

    en vous remerciant



  • j’ai trouvé ceci or je n’arrive pas à les intégrer à mon script j’ai que des erreurs…

    if ($firstFile.LastWriteTime -ne $secondFile.LastWriteTime) {
    # Date de fichier différente
    } else {
    # Date identique
    }
    
    ou 
    
    # Récupération du fichier
    $file = Get-ChildItem 'C:\file.log'
    # Date de creation
    $file.CreationTime
    # Date de dernière modification
    $file.LastWriteTime
    


  • Ok, n’hésite pas à mettre les balises codes via ce bouton balise code , ça permet un meilleur visuel 😏

    De mon coté j’ai trouvé ce script qui synchronise 2 dossiers sur 2 serveurs :

    #"D:\Change" is the folder to watch 
    #"D:\ftp\" is the destination folder which can be shared folder of another server 
    Function checkFilestatus 
    { 
         Param($k)     
            Try 
            {     
            [IO.File]::OpenRead($k).Close() 
            Copy-Item -Path "$k" -Destination "D:\ftp\" -Force 
            } 
            catch 
            { 
            Start-Sleep -Seconds 120 
            Copy-Item -Path "$k" -Destination "D:\ftp\" -Force 
            } 
    } 
    $filewatcher = New-Object System.IO.FileSystemWatcher 
    $filewatcher.Path = "D:\Change" 
    $filewatcher.IncludeSubdirectories = $true 
    $filewatcher.EnableRaisingEvents = $true 
    Register-ObjectEvent $filewatcher "created" -Action { checkFilestatus($($eventargs.fullpath))} 
    Register-ObjectEvent $filewatcher "Changed" -Action { checkFilestatus($($eventargs.fullpath))}
    

    Ayant un portable windows à basculer sous linux ce week end, je vais essayer de prendre le temps d’écrire un script.

    Au cas ou voici une belle bible de scripts powershell :
    https://gallery.technet.microsoft.com/scriptcenter/site/search?f[0].Type=Tag&f[0].Value=Powershell&f[0].Text=Powershell



  • @The-Worm-s

    je te remercie beaucoup

    Je continue mes recherches de mon coté je vous tiens au courant ^^



  • Bon désolé, :rougi:
    j’ai pas encore pris le temps vu que le vieux sony que je devais réinstallé, je l’ai passé sous PepperMint :ange: