J'ai un script PowerShell qui analyse un fichier et envoie un e-mail s'il détecte un certain modèle. J'ai la configuration du code e-mail dans une fonction, et tout fonctionne bien lorsque je l'exécute à partir de l'ISE, mais j'ai utilisé PS2EXE pour pouvoir exécuter le script en tant que service, mais il ne reconnaît pas le fonction "email". mon code ressemble à ceci
#Do things |
foreach{
email($_)
}
function email($text){
#email $text
}
Lorsque je le convertis en exe et l'exécute, j'obtiens cette erreur:
The term 'email' is not recognized as teh name of a cmdlet, function, script file,
or operable program. Check the spelling of the name, or if a path was included,
verify that the path is correct and try again.
Powershell traite l'ordre (de haut en bas), la définition de la fonction doit donc être antérieure à l'appel de la fonction:
function email($text){
#email $text
}
#Do things |
foreach{
email($_)
}
Cela fonctionne probablement très bien dans l'ISE car vous avez toujours la définition de fonction en mémoire d'une exécution ou d'un test antérieur.
En ce qui concerne les appels de fonction, PowerShell est assez différent des autres langages de programmation des manières suivantes:
Faites attention à l'endroit où vous définissez la fonction. Comme PowerShell traite séquentiellement ligne par ligne dans un ordre descendant, la fonction doit donc être défiée avant cette fonction est appelée:
Function func($para1){
#do something
}
func "arg1" #function-call
Dans ISE, la fonction définie ci-dessous l'appel de fonction peut apparaître comme fonctionnant mais (attention) c'est la définition de fonction mise en cache dans une exécution précédente, donc si vous avez mis à jour la fonction, vous êtes vissé.