Question PowerShell et FTP

Plus d'informations
il y a 10 ans 2 mois #9180 par Pierre
PowerShell et FTP a été créé par Pierre
Bonjour à tous. Nouveau dans l'univers powerShell j'aborde petit à petit ce langage de programmation. Après une petite formation avec Arnaud je m'attaque à l'évolution de scripts .bat dans mon entreprise.
C'est là que ca se gatte :) . Dans un script qui s'exécute tous les soirs de la semaine, je déplace des fichiers PDF d'un serveur de fichiers vers un site FTP. Dans le script .bat j'utilise l'exe ftp windows.
Pour Powershell je ne sais pas vraiment quoi faire, si il faut que je continue à utiliser ftp.exe ou si il y'a des fonctions ftp dispo ?
Les infos que j'ai trouvé via google :cheer: m'amène sur ce type d'infos .
De ce que je comprends, le transfert nécessite la création d'un requête web ... mais au-delà de ca je ne comprends pas vraiment la démarche ...
Est-ce que vous pourriez tenter de m'expliquer ? si il y'a plusieurs techniques, laquelle est disons la plus propre ??
Merci d'avance ;-)

NB : j'ai aussi trouvé une classe du .net
mais je comprends pas non plus comment elle fonctionne en powershell ... :unsure:

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 10 ans 2 mois #9182 par Arthur
Réponse de Arthur sur le sujet Re:PowerShell et FTP
Il y a plusieurs mois j'ai codé un petit script qui upload un fichier LOCALE vers un FTP.

Cela ne répond pas entièrement à ton problème mais ca te donne un exemple d'utilisation de la classe ftpwebrequest.

[code:1]<#

.SYNOPSIS
Script permettant d'uploader des fichiers sur un serveur FTP

.DESCRIPTION
Permet d'upload un fichier local sur un serveur FTP.
Paramètres:
-username: Nom d'utilisateur du serveur FTP.
-password: Mot de passe du serveur FTP.
-sourceuri: Adresse du serveur FTP,l'emplacement et le nom du fichier sur le serveur
-path: Emplacement et le nom du fichier à Uploader

Dernière modification : 28/07/2010
Testé avec : Windows XP Pro 32Bit SP3, Windows 7 32bit


.EXAMPLE
Send-FTP -username Sylvester -password Stallone -sourceuri \"ftp://ftp.external.monsite.fr/Rocky/Adrienne.csv\"; -path \".\Adrienne.csv\"

#>
Function Send-FTP
{
param([string]$username = \"\",[string]$password = \"\",[string]$sourceuri = \"\",[string]$path = \"\"«»)
[System.Net.FtpWebRequest]$request = [System.Net.FtpWebRequest]::create($sourceuri)
$request.Method = [System.Net.WebRequestMethods+Ftp]::UploadFile
$request.Credentials = New-Object System.Net.NetworkCredential($username,$password)
$request.UsePassive = $true
$request.UseBinary = $true
$request.KeepAlive = $false
[System.IO.FileStream]$stream = [System.IO.File]::OpenRead($Path)
[byte[]]$buffer = New-Object byte[] $stream.Length
$stream.Read($buffer, 0, $buffer.Length)
$stream.Close()
[System.IO.Stream]$reqStream = $request.GetRequestStream()
$reqStream.Write($buffer, 0, $buffer.Length)
$reqStream.Close()
Write-Host (\"Uploaded Successfully\"«») -ForegroundColor Green
}
[/code:1]

La pièce jointe send_ftp.ps1 est absente ou indisponible

<br><br>Message édité par: bilbao, à: 15/03/11 19:58
Pièces jointes :

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 10 ans 2 mois #9187 par Pierre
Réponse de Pierre sur le sujet Re:PowerShell et FTP
Ok, merci pour cette réponse. A la base je souhaitais utilisé que des cmdlet et fonctions de powershell sans faire appel au framework pour faciliter la mise en place du script sur les différentes plateformes serveur.
Mais cette classe est en effet intéressante. Par contre petite question : dans le $path tu indique le chemin du fichier à uploader ainsi que son nom ; dans mon cas, le répertoire source contient plusieurs PDF dont le nom de fichier correspond à un code. Les 3 premiers chiffre de ce code me permettent d'identifier vers quel FTP envoyer le/les fichiers. Ma question est donc, est-il possible de donner une liste de fichiers plutôt qu'un seul ? ou de mettre un nom de fichier du genre \&quot;xxx*.pdf\&quot; (où xxx représente les 3 premiers chiffres du code qui m'intéressent)?
Dans mon .bat, j'utilise :
- le 'lcd' de ftp.exe pour me placer dans le répertoire source
- le 'mput' de ftp.exe pour faire 'mput xxx*.pdf'

;)

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 10 ans 2 mois #9194 par Jacques Barathon
Réponse de Jacques Barathon sur le sujet Re:PowerShell et FTP
Liabz,

Le Framework est disponible sur tout serveur qui a PowerShell. Ce n'est donc pas plus une contrainte que d'utiliser une commandelette spécifique à PowerShell.

Tout au plus, il faut s'assurer que la classe en question n'est pas apparue dans une version récente du Framework qui ne serait pas installée sur tes serveurs : en effet, PowerShell requiert la version 2.0 du Framework et PowerShell ISE requiert la version 3.5 (SP1 il me semble). Une classe apparue dans le Framework 4.0 ne pourra donc pas être utilisée dans un script PowerShell si l'on n'a pas spécifiquement installé la version 4 du Framework.

Mais l'immense majorité des classes utilisées par les développeurs et les scripteurs sont disponibles dans la version 2.0 du Framework. Pour t'en assurer, tu peux faire une recherche sur le nom de la classe dans MSDN (msdn.microsoft.com). Les versions du Framework qui possèdent cette classe sont indiquées tout en bas de la page MSDN correspondante (section \&quot;Informations de version\&quot; &gt; \&quot;Pris en charge dans : ...\&quot;).

Par exemple, pour la classe FTPWebRequest :

msdn.microsoft.com/fr-fr/library/system.net.ftpwebrequest.aspx

Pris en charge dans : 4, 3.5, 3.0, 2.0

La présence de 2.0 dans cette liste confirme que tu peux l'utiliser dans n'importe quelle installation de PowerShell sans souci.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 10 ans 2 mois #9197 par Pierre
Réponse de Pierre sur le sujet Re:PowerShell et FTP
Merci Janel.
J'ai essayé le code de Bilbao mais j'ai une erreur sur '$request.GetRequestStream' : l'URI n'est pas reconnu par le serveur FTP (ce qui me semble normal puisque le fichier PDF n'est pas présent sur la destination, donc la construction du chemin 'ftp+nom fichier' donne un chemin qui n'existe pas :unsure: )
J'ai la même erreur avec le code présent ici dans 'UPLOAD'.
En fait le serveur FTP est toujours le même quelque soit la destination : \&quot;ftp.mondomaine.com\&quot; ; et selon les identifiants fournis les fichiers sont placés dans un répertoire différent (dir root différent pour chaque user : la base pour un serveur FTP). Du coup quand je donne comme URI \&quot;ftp.mondomaine.com/xxx-yyyyyy.pdf\&quot; j'ai une erreur \&quot; « L'URI demandée n'est pas valide pour cette commande FTP. » .
Là je sèche ... :blink:

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 10 ans 2 mois #9203 par Arnaud Petitjean
Réponse de Arnaud Petitjean sur le sujet Re:PowerShell et FTP
Bonjour Liabz,

Peux tu me donner un indice pour que je puisse t'identifier ? :)

Je voulais juste dire que ce n'est pas \&quot;sale\&quot; de faire appel à l'utilitaire ftp.exe dans un script PowerShell. C'est au contraire l'un des avantages du shell que de pouvoir faire appel à des exécutables externes.

C'est vrai qu'on a souvent tendance à vouloir tout faire en PowerShell (moi y compris); mais au final le plus important c'est arriver à automatiser le boulot ;).

Arnaud

MVP PowerShell et créateur de ce magnifique forum :-)
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ou d'un conseil ?

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.077 secondes
Propulsé par Kunena