Question Script de transfert fichier sur serveur FTP SSL

Plus d'informations
il y a 7 ans 11 mois #25329 par FABRE
Bonjour a tous ;D

Dans le cadre de mon stage en entreprise je travail sur un outil qui permet d'ajouter des références etc à partir d'EXCEL et j'ai créer une macro qui récupère les feuilles EXCEL pour les créer en fichier CSV.

J'ai donc voulu créer une macro qui utilise un Script powershell pour transférer les fichier CSV vers un serveur FTP ( celui de l'entreprise dans laquelle je suis ) mais ce serveur possède un serveur FTP protéger par du SSL du coup comme vous pouvez le deviner j'ai eu ce joli message qui est apparu :D

Exception lors de l'appel de «UploadFile» avec «2» argument(s): «Le serveur distant a retourné une erreur: (534)
534 Policy requires SSL.


ainsi que :

Au caractère C:\temp\ScriptFTP.ps1:42 : 9
+ $client.UploadFile($file, $item.FullName)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : WebException


DU coup je me demandais si il était possible de passer outre la sécurité SSL :D j'ai commencé a regarder et il y aurait peut être une requête qui fait un enableSSL :lol:

voici mon code :D

[code:1]$user = \"USER\" #Compte ftp
$password = \"password\" #Mot de passe du compte ftp
$localdir = \"C:\temp\FTP\" #Dossier source
$ftpdir = \"ftp://monsite.fr/CSV/\"; #Dossier destination

$client = New-Object System.Net.WebClient
$client.Credentials = New-Object System.Net.NetworkCredential($user,$password)


foreach($item in Get-ChildItem -recurse $localdir){

$filename = [system.io.path]::GetFullPath($item.FullName).SubString([system.io.path]::GetFullPath($localdir).Length + 1)
$ftprequest.EnableSsl = $true

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)
}[/code:1]

Message édité par: P_FABRE, à: 19/04/18 10:09<br><br>Message édité par: P_FABRE, à: 19/04/18 12:05

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

Plus d'informations
il y a 7 ans 11 mois #25330 par FABRE
jai changer mon code et j'ai avancer dans la panoplie d'erreur possible ;)

[code:1]$sourceuri = \&quot;ftp://mon-site.fr/CSV/\"; #emplacement dans le serveur FTP où seront stockés les fichiers
$localdir = \&quot;C:\temp\FTP\\&quot; #dossier local où sont stockés les fichiers
$username = 'user' #Nom d'utilisateur pour acceder au serveur FTP
$password = 'password' #Mot de passe de l'utilisateur


foreach($item in Get-ChildItem -recurse $localdir)
{
#Récuperation du nom des fichiers contenue dans le dossier local
$filename = [system.io.path]::GetFullPath($item.FullName).SubString([system.io.path]::GetFullPath($localdir).Length + 0)
# Creation de la requete FTP
$FTPRequest = [System.Net.FtpWebRequest]::Create($sourceuri+\&quot;$filename\&quot;«»)
$FTPRequest.Credentials = New-Object System.Net.NetworkCredential($username,$password)
$FTPRequest.Method = [System.Net.WebRequestMethods+Ftp]::UploadFile
$FTPRequest.UseBinary = $true
$FTPRequest.UsePassive = $false
$FTPRequest.KeepAlive = $false
$ftprequest.EnableSsl = $true #preciser True si le serveur FTP est securise par un certificat
$ftprequest.Proxy = $NULL


# Read the File for Upload
Write-Host \&quot;Transfert de $item...\&quot;
$FileContent = Get-Content -en byte $Localdir$filename
$FTPRequest.ContentLength = $FileContent.Length


# Get Stream Request by bytes
$Run = $FTPRequest.GetRequestStream()
#$Run.Write($FileContent,0,$FileContent.Length)


# Cleanup
#$Run.Close()
#$Run.Dispose()
}
[/code:1] et du coup j'obtiens une nouvelle erreur qui m’empêche de continuer qui est :


[code:1]Exception lors de l'appel de «GetRequestStream» avec «0» argument(s): «Le serveur distant a retourné une erreur:
(501) Erreur de syntaxe dans les paramètres ou les arguments.»
Au caractère C:\temp\ScriptFTP2.ps1:33 : 5
+ $Run = $FTPRequest.GetRequestStream()
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:«») [], MethodInvocationException
+ FullyQualifiedErrorId : WebException
[/code:1]
Si on peut regarder ;) pour ca ;)<br><br>Message édité par: Arnaud, à: 19/04/18 17:38

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

Plus d'informations
il y a 7 ans 11 mois #25332 par Arnaud Petitjean
Hello !

Le message d'erreur est clair; tu ne peux pas appeler cette méthode sans préciser de paramètres.

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 ?

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

Plus d'informations
il y a 7 ans 11 mois #25333 par FABRE
ok mais je dois mettre quoi comme type de paramètre pour ca ? :D

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

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