Bonjour,
Après moult recherche, je viens quérir vos connaissances avancées .
J'ai créé un un script powershell qui permet de tester si un fichier reçu est une archive et si c'est le cas de le dézipper et d'envoyer un Mail.
Le script fonctionne, mais j'aimerai éviter les redondance (de la ligne 34 à 61).
Je pensais faire quelque chose comme ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67 Param( [string]$Filename ) # 0. fonction de ce script # 1. on test que l'on trouve bien la balise <?xml version="1.0" encoding="ISO-8859-1"?> dans le fichier # 2. si pas le cas, on déplace le zip dans le repertoire GZIP et on le decompresse dans le répertoire de travail cd C:\Script_Ps1 $path = "c:\ftp\in\" $PathFilename = "$path$Filename" $SevenZip = "`"C:\Program Files\7-Zip\7z.exe`"" $Expediteur = "tata@mail.com" $PathGzip = "c:\ftp\in\Gzip" $Gzippathfilename = "$PathGzip\$Filename" If (Test-Path $PathFilename) { $PthFilename = Get-ChildItem $path$Filename $SwiftFic = Get-Content ($PthFilename) foreach ($message in $SwiftFic) { if ($message -match "<?xml version=") { exit } else { Move-Item -Path $PathFilename -Destination $PathGzip $ungzip = "$SevenZip e $Gzippathfilename -o$path" cmd.exe /c "$ungzip" rename-item "$PathFilename~" -newname $Filename if ($Filename -like "SWN-RUN*") { $Sujet = "RUN : Traitement du Fichier compressé" $message = " <p> Le fichier <SPAN style=color:#0000ff>$Filename </span>, nous a été transmis compressé. <br/> Il a été traité par notre programme de reprise. <br/> </p> " $Destinataire = "toto2<toto@mail.com>, toto2<toto2@mail.com>" .\SendMail.ps1 -sujet "$Sujet" -Message "$Message" -expediteur "$Expediteur" -Destinataire "$Destinataire" } if ($Filename -like "SWN-SGB*") { $Sujet = "SGB : Traitement du Fichier compressé" $message = " <p> Le fichier <SPAN style=color:#0000ff>$Filename </span>, nous a été transmis compressé. <br/> Il a été traité par notre programme de reprise. <br/> </p> " $Destinataire = "toto2<toto@mail.com>, toto2<toto2@mail.com>" .\SendMail.ps1 -sujet "$Sujet" -Message "$Message" -expediteur "$Expediteur" -Destinataire "$Destinataire" } exit } } }
Je sais que GOTO n'existe pas en Powershell, mais il y a t'il un moyen d'aller vers une Etiquette ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 if ($Filename -like "SWN-RUN*") {goto Mail} if ($Filename -like "SWN-SGB*") {goto Mail} exit } } } :Mail $Sujet = "SGB : Traitement Fichier SWIFTNET compressé" $message = " <p> Le fichier <SPAN style=color:#0000ff>$Filename </span>, nous a été transmis compressé. <br/> Il a été traité par notre programme de reprise. <br/> </p> " $Destinataire = "toto2<toto@mail.com>, toto2<toto2@mail.com>" .\SendMail.ps1 -sujet "$Sujet" -Message "$Message" -expediteur "$Expediteur" -Destinataire "$Destinataire"
J'ai voulu utiliser "BREAK Mail" mais a priori il faut l'associer à "WHILE"
Le 2eme cas est l'envoi de destinataire multiple à partir d'une variable.
$Destinataire = "toto2<toto@mail.com>, toto2<toto2@mail.com>"
Seul la 1ere adresse est prise en compte.
Pouvez-vous m'aider également sur ce point ?
J’espère que ma demande n'est pas trop confuse.
Yannick. (RAKHANN)
Merci d'avance pour vos solutions.
Partager