J'ai des fonctions dans un fichier "bibliothèque" à appeler depuis mon script "travailleur".
Fichier de bibliothèque
function ShowMessage($AValue)
{
$a = new-object -comobject wscript.Shell
$b = $a.popup( $AValue )
}
Fichier de travail
. {c:\scratch\b.ps1}
ShowMessage "Hello"
L'exécution du script "travailleur" fonctionne correctement dans PowerShell IDE mais lorsque je clique avec le bouton droit sur le fichier de travail et choisis "Exécuter avec PowerShell", il ne trouve pas la fonction "ShowMessage". Les deux fichiers sont dans le même dossier. Que peut-il se passer?
Dans le fichier de travail, changez ceci:
. "c:\scratch\b.ps1"
ShowMessage "Hello"
Comme @RoiDanton l'a mentionné ci-dessous:
Attention lors de l'utilisation d'un chemin relatif: N'oubliez pas de placer un point avant le chemin. ".\b.ps1".
Le premier point est un opérateur utilisé pour modifier la portée et dans ce contexte, il n'a rien à voir avec les chemins. Voir Notation de la source de points .
Dans votre fichier de travail, dot-source le fichier de bibliothèque, cela chargera tout le contenu (fonctions, variables, etc.) dans la portée globale, puis vous pourrez appeler des fonctions à partir du fichier de bibliothèque.
=================== Worker file ==========================
# dot-source library script
# notice that you need to have a space
# between the dot and the path of the script
. c:\library.ps1
ShowMessage -AValue Hello
=================== End Worker file ======================