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
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.
Peut-être quelque chose comme
powershell -command "& { script1.ps; My-Func }"
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.