NON RÉSOLU Demande d'aide script ftp
-
@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
-
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.ps1Ou 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 placerEn 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:
-
-
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 , ç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 -
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: -
Sauf mention contraire, le site est placé sous double licence Creative Commons BY-SA et GNU Free Documentation License propulsé par NodeBB