Appel d'une fonction PowerShell spécifique à partir de la ligne de commande

J'ai un script PowerShell qui contient plusieurs fonctions. Comment puis-je appeler une fonction spécifique à partir de la ligne de commande?

Cela ne fonctionne pas:

powershell -File script.ps1 -Command My-Func
31
demandé sur Peter Mortensen 2009-09-10 18:50:54

3 réponses

Vous devez généralement "dot" le script dans scope (global, un autre script, dans un scriptblock). Le pointage d'un script chargera et exécutera le script dans cette portée sans créer une nouvelle portée imbriquée. Avec les fonctions, cela a l'avantage qu'elles restent après l'exécution du script. Vous pouvez faire ce que Tomer suggère sauf que vous auriez besoin de dot le script par exemple:

powershell -command "& { . <path>\script1.ps1; My-Func }"

Si vous voulez simplement exécuter la fonction à partir de votre session PowerShell actuelle, faites ce:

. .\script.ps1
My-Func

Sachez simplement que tout script qui n'est pas dans une fonction sera exécuté et que toutes les variables de script deviendront des variables globales.

66
répondu Keith Hill 2009-09-10 22:51:31

Peut-être quelque chose comme

powershell -command "& { script1.ps; My-Func }"
3
répondu Tomer Gabel 2009-09-10 15:30:17

L'instruction lance le message d'erreur ci-dessous. Le point est nécessaire avant le nom du nom du fichier pour le charger en mémoire, comme L'a suggéré Keith Hill.

MyFunction: The term 'MyFunction' is not recognized as the 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.

0
répondu Laszlo Pinter 2016-06-23 01:48:37