Comment puis-je créer un PowerShell “principal” de la fonction?

J'ai utilisé de nombreux langages de scripts dans le passé, et je suis en train d'apprendre PowerShell. Dans ces autres langues en général, je définir mon principal logique avant de définir mes fonctions, de sorte que quelqu'un qui lit le code va se concentrer sur le principal de la logique de la première. Souvent, cela prend la forme de la création d'une "main" de classe ou de fonction en haut du fichier, et en invoquant le bas.

Dans PowerShell, ce motif pourrait ressembler à ceci:

$main = {
    ...
    do-something
    ...
}
function do-something() {
    <function definition here>
}

& $main

Cela fonctionne bien, mais je veux maintenant de tirer parti de PowerShell est la capacité d'exécuter du code à distance. Depuis $main est une PowerShell ScriptBlock objet, j' [pense que j'] peut exécuter du code sur une machine distante comme ceci:

Invoke-Command -ScriptBlock $main -ComputerName whatever;

Cependant, la machine distante ne sait rien sur ma fonction, puisqu'il est défini en dehors de la portée de $main. Je peux, bien sûr, déplacer la définition de la fonction dans $, mais puis-je le mettre au-dessus de la logique et je suis de retour à mon premier problème.

Est-il un modèle commun pour l'écriture de scripts PowerShell où la logique principale est dans une fonction ou un bloc de script en haut du fichier, comme dans beaucoup de langues traditionnelles? Comment écrire des scripts complexes -- ont-ils toujours juste écrire de haut en bas, en répandant dans les fonctions nécessaires au top?

Quelqu'un a marqué ce en tant que double de la question Pourquoi ai-je besoin d'avoir mes fonctions écrites en premier dans mon script Powershell?. Ce n'est pas un doublon. Je sais pourquoi fonctions doivent être définies d'abord, j'ai été de programmation comme C était la fraîcheur de la nouvelle langue.

Ce que je demande, c'est le motif pour le faire dans poweshell, en particulier dans le contexte de vouloir être en mesure d'exécuter le code principal à distance.

Est-il un modèle commun pour mettre un main bloc en haut d'un script powershell? Powershell syntaxe et les expressions idiomatiques sont assez différents de plus de langues traditionnelles, et même de nombreux populaire moderne, les langages de script, que le motif de déplacement de la logique principale vers le haut n'est pas évident (ou c'est peut-être, mais je n'en ai pas trouvé les bons exemples ou de la documentation)

Double Possible de Pourquoi ai-je besoin d'avoir mes fonctions écrites en premier dans mon script Powershell?
Je ne crois pas que c'est un doublon, je sais pourquoi fonctions doivent être déclarées en premier. Au lieu de cela, je me demande pour le commun des idiomes de le faire en powershell, où "principal" est apparemment un concept étranger, et tout en préservant la possibilité d'invoquer le code sur une machine distante. Aucune des réponses à cette question sont adaptés réponses à cette question. J'ai édité ma réponse nous l'espérons, pour clarifier, si cette question a été répondu il y a quelques années.

OriginalL'auteur Bryan Oakley | 2014-01-08