Question Send-MailMessage PowerPack Scheduler array

Plus d'informations
il y a 15 ans 2 mois #8533 par Robby
Avec l'utilisation du PowerPack WPK :
cf.
blogs.msdn.com/b/powershell/archive/2009...cheduler-module.aspx

Je rencontre une erreur lors du passage d'une variable array dans l'appel du Send-MailMessage au niveau de l'Attachment : \"Vous ne pouvez pas appeler de méthode sur une expression ayant la valeur Null\".

A noter, qu'en dehors du bloc New-Task, ce code ci-dessous fonctionne bien, il prend le tableau en Attachment :
[code:1]$messageParameters = @{
Subject = \"Message du $env:ComputerName.$env:USERDNSDOMAIN - $((Get-Date).ToShortDateString())\"
Body = \" Essais ...................\"
From = \"sdm_TaskScheduler_module.ps1@monadresse.fr\"
To = \"dest@monadresse.fr\"
SmtpServer = $PSEmailServer
}
Send-MailMessage @messageParameters -Attachment $arr_fic -BodyAsHtml[/code:1]

voici le script \"error_smscheduler_WPK.ps1\" :
(j'ai essayé de placer le tableau en global, l'appel à la méthode toString() ... sans succès)
[code:1]
#....

$ens_AllShare=@(\"*.txt\", \"*.ps1\"«»)

$global:arr_fic = @() # testé pour lever erreur dans appel du PowerPack WPK

$ens_AllShare | ForEach-Object -process `
{
# collecte des fichiers reçus des types contenus dans l'ensemble ci-dessus :
get-childitem $_ | %{$arr_fic += $_.FullName }
}

New-Task |
Add-TaskAction -Hidden -Script {
$ErrorActionPreference = \"Stop\"
try {
$messageParameters = @{
Subject = \"Message du $env:ComputerName.$env:USERDNSDOMAIN - $((Get-Date).ToShortDateString())\"
Body = \" Essais ...................\"
From = \"sdm_TaskScheduler_module.ps1@monadresse.fr\"
To = \"dest@monadresse.fr\"
SmtpServer = $PSEmailServer
}
Send-MailMessage @messageParameters -Attachment $arr_fic.ToString() -BodyAsHtml
} catch {
$_ | Out-File $REPTRAV\ProblemsSendingHotfixReport.log.txt -Append -Width 1000
}
} |
Add-TaskTrigger -Daily -At \"9:54 AM\" |
Add-TaskTrigger -OnRegistration |
Register-ScheduledTask \"DailyHotfixReport\"[/code:1]


La pièce jointe error_smscheduler_WPK.ps1 est absente ou indisponible

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

Plus d'informations
il y a 15 ans 2 mois #8535 par blanc
Bonsoir,
Juste quelques idées du débutant que je suis ...
Et en plus je ne dispose que de XP et l'objet com Schedule.Service n'existe pas sous XP.
Mais j'ai lu le fichier joint et l'erreur \"actuelle\" est due à l'introduction de la conversion .ToString() pour le paramètre -Attachment.
Je crois comprendre que ton anomalie se produit lors de l'exécution de la \"Task\".
A mon avis, faut redémarrer les investigations avec la bonne ligne de commande: Send-MailMessage @messageParameters -Attachment $arr_fic -BodyAsHtml.

Il me semble que le problème soit plus \"général\" (je ne sais pas dire plus précisément, c'est juste une idée).
Je prends comme point de départ la commande et le scriptblock suivants :
Add-TaskAction -Hidden -Script { $messageParameters = @{ from=\"titi\" ; to = \"toto\"} }
Il me semble que le contenu du scriptblok soit passé sans interprétation ni remplacement de variable à Add-TaskAction. Et donc $messageParameters est bien défini lors de l'exécution du scriptblok par la tâche lorsqu'elle se lance. Mais la variable $arr_fic n'existe pas lorsque ce scripblok est lancé par la tâche.
Je dirais qu'il faut passer les noms des fichiers en paramètres de la commande add-TaskAction, puis les récupérer dans le scriptblock.
Ne pouvant pas faire de test car je n'ai que XP, je ne peux qu'avoir des idées sur l'affaire.
Les arguments sont des chaînes à la queue-leu-leu.
Add-TaskAction -Hidden -Script { ...} -Arguments $arr_fic.split()
Reste à écrire le scriptblock (un here-string irait bien pour cela) pour qu'il prenne le(s) paramètre(s) en entrée et le(s) traite comme un tableau de chaînes.
{
param($chaine1, .... mais combien ??? )
# $messageParameters = @{...
# il faut reconstruire le tableau à partir des paramètres
$ar_fichiers = ????
Send-MailMessage @messageParameters -Attachment $ar_fichiers -BodyAsHtml
}
Reste le problème du nombre et celui de la reconstruction du tableau.

Peut être que le tableau d'argument \"implicite\" $args d'une fonction marcherait ici. Il règlerait les 2 soucis d'un coup. A voir.
{
# $messageParameters = @{...
Send-MailMessage @messageParameters -Attachment $args -BodyAsHtml
}
Comme source d'inspiration :
[code:1]$toto=
{
write-host $args.gettype()
}
& $toto 1 2 [/code:1]
J'avoue que pour ce soir je vais m'arrêter là.
Jelinek m'attend et elle est parfois \"furieuse\".

Autre solution : générer le tableau des fichiers dans le scriptblock. Pas toujours possible selon le contexte de la \"task\", pas forcément pertinent en terme fonctionnel, mais plus simple en terme d'écriture.

Salutation.

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

Plus d'informations
il y a 15 ans 2 mois #8539 par Robby
En fait, il suffit pour régler ce problème de déclarer le tout dans le script même, ce qui n'ôte pas le souci quand ces variables proviennent de l'extérieur du script bloc .

En faisant comme ceci, c'est plus clair et ça ne plante pas au niveau du passage du tableau dans le Semd-MailMessage -Attachment ...

[code:1]#region Scheduler_new-task

New-Task |

Add-TaskAction -Hidden -Script { &(C:\Users\......\Documents\WindowsPowerShell\script_app.ps1)} |

Add-TaskTrigger -Daily -At \"9:54 AM\" |

Add-TaskTrigger -OnRegistration |

Register-ScheduledTask \"NomDeLaTache_ps\"


#endregion new-task [/code:1]

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

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