10
votes

Appelant la fonction PowerShell avec le paramètre de .cmd ou fichier .bat

J'ai écrit un script PowerShell qui est une fonction complète des paramètres de la fonction (E.G. nom de fonction (param) {}) et ci-dessous est un appel à la fonction, avec le paramètre.

Je veux pouvoir appeler cette fonction dans son fichier .ps1, en passant dans le paramètre. Comment puis-je pouvoir emballer un appel à la fonction via un fichier .bat ou .cmd? J'utilise PowerShell v2.0.


0 commentaires

3 Réponses :


0
votes

Je pense que tout ce que vous avez à faire est de nommer les paramètres de l'appel au script comme suit: xxx

param1 et param2 sont des noms de paramètres réels dans la signature de fonction.

profiter!


1 commentaires

Comment puis-je appeler la fonction réelle? Cela appelle-t-il ma fonction? Et si j'ai> 1 fonction dans le même fichier .PS1 avec la signature en termes de paramètres?



16
votes

Vous devez utiliser un "point-approvisionnement" du script et la commande avec plus d'une instruction: DOT-Sourcing du script + appel de la fonction avec des paramètres.

Le script de test test-fonction.PS1 : xxx

le fichier .bat appelant: xxx

notes: ce n'est pas une exigence mais je vous recommanderais de joindre le Texte de commande entière avec des guillemets doubles s'échappant, si nécessaire, des guillemets internes à l'aide de règles d'échappement CMD.


1 commentaires

Cela a fonctionné bien. Il suffit de vouloir envelopper le chemin du fichier PS avec ' de sorte que les espaces dans le chemin ne l'empêchent pas de travailler. Donc powershell.exe ". 'C: \ chemin à \ test-test.ps1'; test-me -param1 'bonjour monde' -param2 12345"



0
votes

Appeler une fonction PowerShell à partir de cmd ou de lot avec des arguments, vous devez utiliser le paramètre -Command ou son alias -c .

ROMANS Réponse fonctionnera avec PowerShell 5.1 Par exemple, mais échouera pour PowerShell 7.1.

Devis d'un problème que j'ai laissé sur GitHub sur la raison pour laquelle le même commandement n'a pas fonctionné est:

afin de prendre en charge les lignes UNIX Shebang, CLI de PWSH est désormais par défaut sur le paramètre -FILE (qui n'attend que un chemin de fichier de script), alors que PowerShell.exe par défaut de -Command / -C. Pour que vos commandes fonctionnent avec pwsh, vous devez utiliser -Command / -C explicitement.

Donc, si vous avez un fichier PowerShell test.ps1 avec: xxx

et le fichier de lot sera alors: < / p> xxx

Les citations autour de ... pathto \ test.ps1 sont indispensables si votre .ps1 contient des espaces. < / p>

La même chose vaut pour ... pathto \ pwsh.exe


Voici le problème GITUB I Publié complet:

https://github.com/powershell/powershell/issues/15281


0 commentaires