Flash info

"La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information. "

Albert Einstein (1879-1955)

 
Accueil arrow Forum

Bienvenue sur le forum PowerShell-Scripting.com

 
JeanHubertDLC
Utilisateur

PowerShelleur Débutant
Messages: 2
graphgraph
Karma: 0  
Script vérification des dates des fichiers sur FTP - 14/09/18 10:17 Bonjour à tous,
Je m'adresse à vous car je débute depuis peu dans le domaine du Powershell dans le cadre de mon stage.
Je dois créer un script en powershell qui me permettra de vérifier si les fichiers d'un serveur FTP sont présents depuis moins de 4h et qui générera une alerte si l'un ou plusieurs fichiers du serveur est présent depuis plus de 4H

J'ai pour le moment ce code :
#On importe le module
Import-Module PSFTP
Import-Module Microsoft.PowerShell.Security

#On instaure les variables
$user = "username"
$password = "password"
$ftp = "mon.ftp"
$secpasswd = ConvertTo-SecureString "password" -AsPlainText -Force
$mycreds = New-Object System.Management.Automation.PSCredential ($user,$secpasswd)
#On se connecte au serveur ftp
Set-FTPConnection -Credentials $mycreds -Server $ftp
Get-FTPConnection
#On récupère les pdf du ftp
$date= (Get-Date)
$CurrentDate = (Get-Date).AddHours(-4)
Get-FTPChildItem *.pdf | Where-Object {$_.LastWriteTime -lt $date} | Select-Object Name
foreach($PSItem in Get-FTPChildItem *.pdf) {
if ($CurrentDate - $date -le 4) {
[System.Reflection.Assembly]::LoadWithPartialName(“System.Windows.Forms”)
[Windows.Forms.MessageBox]:: Show(“Attention ! Un ou plusieurs fichiers sont présents depuis 4h ou plus.”, "Alerte transfert FTP", [Windows.Forms.MessageBoxButtons]::OK, [Windows.Forms.MessageBoxIcon]::Information)
Then stop
} else {
Write "OK"
}
}

Cependant ce script m'amène à l'erreur suivante (les informations d'identification sont évidemment ici générique et chez moi j'utilise donc d'autres identifiants et serveur) :

Set-FTPConnection : Exception lors de l'appel de « GetResponse » avec « 0 » argument(s) : « Le serveur distant a retourné une erreur : (530) Non connecté. »
Au caractère C:UsersNathenpasDesktopStage cliniquePowershell scriptsScript v3.ps1:14 : 1
+ Set-FTPConnection -Credentials $credentials -Server $ftp
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: ( : ) [Write-Error], WriteErrorException
+ FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,Set-FTPConnection

Je ne comprends pas d'où me vient cette erreur. De plus, il suffit que je me connecte en utilisant Set-FTPConnection -Credentials $user -Server $ftp puis le script fonctionne cependant, il me faut donc entrer le mot de passe manuellement, or ce script doit entièrement fonctionner seul sans la moindre interaction humaine.
Merci d'avance pour le possible coup de main.
Je suis ouvert à toutes propositions aussi simples et stupides soient elles.
Cordialement, JeanHubertDLC, apprenti codeur
  | | L'administrateur a désactivé l'accés public en écriture.
JeanHubertDLC
Utilisateur

PowerShelleur Débutant
Messages: 2
graphgraph
Karma: 0  
[Update] - 14/09/18 13:35 J'ai réussi à corriger le problème, il m'a suffit de stocker les informations de connexion dans un fichier texte que j'ai placé à la racine et les utiliser lors de l'authentification au serveur FTP
Voici le code :
Code:

 #On importe le module Import-Module PSFTP Import-Module Microsoft.PowerShell.Security #On instaure les variables $user "username" $encrypted Get-Content C:\Users\Nathenpas\scriptsencrypted_password1.txt ConvertTo-SecureString $credential = New-Object System.Management.Automation.PSCredential($user$encrypted) $ftp "ftp.hote.com" #On se connecte au serveur ftp Set-FTPConnection -Credentials $credential -Server $ftp  #Set-FTPConnection -Credential $user -Server $ftp Get-FTPConnection #On récupère les pdf du ftp $date= (Get-Date) $CurrentDate = (Get-Date).AddHours(-4) Get-FTPChildItem *.pdf. | Where-Object {$_.LastWriteTime -lt $date} | Select-Object Name,LastWriteTime Write-Host "$File.LastWriteTime" foreach($PSItem in Get-FTPChildItem *.pdf) { if ($CurrentDate $date -le  4) {     Write-Host "Attention, fichiers présents depuis 4+ heures" exit } else {    "Write-Host "R.A.S" } }


Cependant, la vérification des dates ne s'effectue plus correctement je cherche donc d'éventuels conseils concernant l'obtention et la comparaison des dates provenant d'un fichier FTP.
Je vous remercie et je ferais une nouvelle update en cas de nouveau.
Merci d'avance.

Message édité par: JeanHubertDLC, à: 14/09/18 13:36

Message édité par: Arnaud, à: 20/09/18 15:01
  | | L'administrateur a désactivé l'accés public en écriture.
6ratgus
Utilisateur

PowerShelleur Platinum
Messages: 1503
graphgraph
Karma: 111  
Re:[Update] - 17/09/18 13:38 salut JeanHubertDLC

je ne saurais dire quel été le problème de ton premier message car j'ai utilisé la même syntaxe sans problème

pour ton deuxième message
j'ai fait des tests avec ce module
j'ai trouvé au moins trois erreurs :
premiere tu utilise "LastWriteTime" au lieux de "ModifiedDate" dans ta comparaison de date (le where) !!
deuxième erreur (de frappe) tu utilise la variable $date au lieux de $currentdate toujours dans ta comparaison de date (le where)
pour le if tu soustrait la date la vielle à la date récente ce qui donne une valeur négative,
Troisième erreur l'objet renvoie par la soustraction contient plusieurs propriétés (heurs, minutes, secondes, ...), il faut que lui indique sur laquelle tu veux travailler !
Code:

 if (($CurrentDate $date).hours -le -4) {


il reste quelques details mais n'empêche pas le script de fonctionner
  | | L'administrateur a désactivé l'accés public en écriture.
goro
Utilisateur

PowerShelleur Débutant
Messages: 17
graphgraph
Karma: 0  
Re:[Update] - 28/09/18 14:56 Salut,
J'ai eu le même retour d'erreur que toi lors de la création de mon script et il venait du fait que dans mon mot de passe il y avait un caractère spécial mal interprété, il finissait par "$" que j'ai remplacé par "`$" et depuis la connection est good
Pour ton autre problème je ne peux pas t'aider dsl
  | | L'administrateur a désactivé l'accés public en écriture.
© 2018 PowerShell-Scripting.com