Bonjour à tous.

Cette question va sans doute vous paraître simple, mais moi hélas je n'y entends rien. Pour mes travaux personnels (recherche météorologique perso) j'ai besoin de quelques automatisations sur mon PC, et pour ce faire j'ai choisi d'employer Powershell (ça m'a l'air plus puissant qu'en Batch, mais je ne suis pas bien avisé). Je démarre pratiquement sans base, donc je glane des informations sur le net, aussi j'espère que vous serez indulgents.

Pour faire court, j'ai un petit script PS qui me télécharge chaque heure des images météorologiques satellites, et me les enregistre sur mon PC dans un dossier transitoire. Certaines de ces images sont des fichiers vides, car certaines de ces images ne sont pas encore publiées au moment du téléchargement. Mon objectif est de créer un script PS qui me supprime les images vides (avant de créer un script qui me les triera, mais ce sera pour plus tard...). J'ai pensé au poids du fichier : les images "normales" pèsent au minimum 150 KB, les images vident pèsent moins de 5 KB.

Ça m'avait l'air tellement simple, en farfouillant sur le net, et pourtant :

Code PowerShell : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
$dossier = "E:\telechargements-automatiques\dossier-transitoire_sat24"
$tailleMin = 5
Get-ChildItem -Path $dossier -Recurse | ForEach-Object{
    if ($_.Length / 5KB -lt $tailleMin)
    {Remove-Item $_ -Force} else {}}

ne fonctionne pas (même sur un dossier test ne contenant que 2 images : l'une "normale", l'autre vide.)

J'obtiens un message d'erreur étonnant (pour le néophyte que je suis) :

Remove-Item : Impossible de trouver le chemin d'accès « E:\telechargements-automatiques\satellite-ir-europe-sat24_202008300650.jpeg », car il n'existe pas.
Au caractère E:\telechargements-automatiques\telechargements-automatiques_060min_sat24_traitement.ps1:5 : 6
+ {Remove-Item $_ -Force} else {}}
+ ~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (E:\telechargeme...2008300650.jpeg:String) [Remove-Item], ItemNotFoundException
+ FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.RemoveItemCommand
Ce qui m'étonne, c'est que je remarque dans le message d'erreur que le chemin d'accès est faux, ce n'est pas :

E:\telechargements-automatiques\satellite-ir-europe-sat24_202008300650.jpeg
qu'il faut supprimer,
mais :

E:\telechargements-automatiques\dossier-transitoire_sat24\satellite-ir-europe-sat24_202008300650.jpeg

Pourtant le chemin d'accès est juste dans ma définition de $dossier. Et de même l'image satellite satellite-ir-europe-sat24_202008300650.jpeg est bien celle qui est "vide" (pas de message d'erreur pour la deuxième image, laquelle est normale et ne doit donc pas être supprimée). La "mécanique" du script en elle-même fonctionne.

Si par contre, juste pour essayer, je supprime de mon script précédent le code censé traiter mes fichiers, c'est-à-dire que j'écris ceci :

Code PowerShell : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
$dossier = "E:\telechargements-automatiques\dossier-transitoire_sat24"
$tailleMin = 5
Get-ChildItem -Path $dossier -Recurse


Et bien cela fonctionne et j'obtiens la liste de toutes mes images, avec leur date de création, leur taille, etc.

Quelqu'un comprend ? Où se situe mon erreur ?

PS : je me doute bien qu'il doit exister un moyen de demander à mon script de ne télécharger que les images dont la taille est supérieure ou égale à une certaine valeur, mais je ne sais pas faire non plus, et je n'ai pas trouvé sur le net. Mais j'aimerai quand même bien comprendre pourquoi mon script ne fonctionne pas, l'apprentissage passant par les erreurs (enfin je crois).
PS2 : comment faites-vous pour apprendre le langage PS ? Je dois être une andouille, car je ne trouve pas sur le net de "cours" destinés aux débutants, je tombe à chaque fois sur des enseignements qui nécessitent de nombreuses bases que je n'ai pas. J'en suis d'autant plus étonné qu'à l'époque où j'ai appris le langage html, css, et un peu php, je trouvais d'intarissables ressources. En PS2, soit je trouve des cours qui m'apprennent à écrire : Bonjour je m'appelle John, soit des cours où je suis complètement dépassé par le niveau requis.