Bonjour à tous,

Je débute avec le powershell, je réalise mon premier script qui me permet de déplacer des fichiers et de les envoyer par mail. je rencontre deux petit soucis, mon script s'execute via le planificateur de tâche
- Avec le fichier .ps1 le déplacement des dossiers se passe bien mais quelque soit le cas pas de mail
- En créant un exe deplacement des dossiers ok, mail pour Cas 1 Etape 3 ok mais pas de mail pour le Cas 2
- En exécutant directement le script via le powershell tout fonctionne, mais si le Cas 2 Etape 1 se présente 2 fois d'affilé pas de mail et un message d'erreur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
Impossible d'appeler une méthode dans une expression Null.
Au caractère Ligne:28 : 1
+ $SMTPclient.Send($MailError2)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation : (:) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull
J'ai plusieurs tests :
- Cas 1 :SI le fichier existe :
  1. etape 1 Je déplace le fichier vers un autre repertoire et je fait une copie vers un répertoire d'archivage
  2. Etape 2 Si le fichier existe et que le 2eme répertoire distant est disponible alors je copie le fichier sur celui-ci
  3. Etape 3 Si le fichier existe et que le répertoire distant n'est pas disponible j'envoi le fichier par mail
  4. Etape 4 Je supprime je fichier en local


- Cas 2 : Sinon le fichier n'existe pas
  1. j'envoi un email informant que le fichier n'est pas présent

Le scritp :

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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
 
Start-Transcript -Path "C:\Program Files\test\Logs\Envoi-Ventes.rtf"
#Formater la date au format AAAAMMJJ ...
[String]$date = Get-Date -format ddMMyyyy-HHmm
 
#Envoi mail
 
$Expediteur = “Serveurtest@XXX.com”
$Destinataire = “MisterX@XXX.com”
$DestinataireError = “MisterX@XXXX.com”
 
#Objet et corps du mail 
$Objetmail = “Fichier Fichier01 de la test de test”
$Corpsmail = “Vous trouverez en pièce jointe le fichier des ventes de la journée d hier” 
$ObjetmailError1 = “Fichier01 - serveur1 Injoignable, impossible d envoyer le fichier des ventes de test”
$CorpsmailError1 = “Le fichier des ventes (en piece jointe) n a pas pu etre transmis sur le serveur, il a été déplacé dans le répertoire d archivage du serveur de la test Vérifiez la connexion avec serveur1” 
$ObjetmailError2 = “Fichier01 introuvable - Le fichier des ventes de test est introuvable”
$CorpsmailError2 = “Il n y a pas de fichier des ventes généré dans le répertoire d export de pour test”
 
#Fichier que l'on va envoyer en pièce jointe
$MonFichier = "D:\Export\Fichier01.csv"
$FichierExport = "C:\Program Files (x86)\Export\Fichier01.csv"
$FichierArchive = "C:\Program Files (x86)\Archives\Fichier01.csv"
$DossierCible = "\\192.168.0.1\tests"
 
# Fichier archive
[String]$RnFichierArchive = $date + '_Fichier01.csv'
 
#Serveur smtp
$SMTPServer = “smtp.orange.fr”
 
#Identifiant SMTP
$SMTPAuthUsername = "XXXXXXXXXXXX@orange.fr"
$SMTPAuthPassword = "XXXXXXXX"
 
#On ajoute un nouvel objet qui va rassembler nos variables précédentes
$Mail = new-object System.Net.Mail.MailMessage $Expediteur, $Destinataire, $Objetmail, $Corpsmail
$MailError1 = new-object System.Net.Mail.MailMessage $Expediteur, $DestinataireError, $ObjetmailError1, $CorpsmailError1
$MailError2 = new-object System.Net.Mail.MailMessage $Expediteur, $DestinataireError, $ObjetmailError2, $CorpsmailError2
 
If ((Test-Path $MonFichier) -eq $True) 
{
 
#On cré une archive du fichier et on renomme avec la date du jour :
Move-Item -Path $MonFichier -Destination $FichierExport -Force
Copy-Item -Path $FichierExport -Destination $FichierArchive -Force
rni $FichierArchive $RnFichierArchive
 
 
 
#On ajoute un nouvel objet qui va associer la variable attachment à notre variable précédement crée,
#fichier
$PieceJointe = new-object System.Net.Mail.Attachment $FichierExport
 
#On va ajouter à notre message, qui a déjà les variables du début, la variable attachment va être associé
#à une pièce jointe 
$Mail.Attachments.Add($PieceJointe)
$MailError1.Attachments.Add($PieceJointe)
 
$SMTPclient = new-object Net.Mail.SmtpClient($SmtpServer, 587)
$SMTPClient.Credentials = New-Object System.Net.NetworkCredential($SMTPAuthUsername, $SMTPAuthPassword)
 
#On envoie notre mail avec fichier dans tous les cas
#$SMTPclient.Send($Mail)
 
	If ((Test-Path $DossierCible) -eq $True){
			Copy-Item -Path $FichierExport -Destination $DossierCible
	}else{
			#On envoie notre mail avec fichier si serveur1 injoignable
			$SMTPclient.Send($MailError1)
		}
 
	$PieceJointe.Dispose()
 
	Remove-Item $FichierExport
 
 
}else{
	#On envoie le mail d'erreur pour fichier introuvable
	$SMTPclient.Send($MailError2)
}
 
Stop-Transcript
En vous remerciant par avance pour votre aide