web-dev-qa-db-fra.com

Appeler une fonction dans un autre script lors de l'exécution à l'aide de 'Run With PowerShell'

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?

47
Brian Frost

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 .

74
Andrey Marchuk

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 ======================
15
Shay Levy