2009-07-14 10 views

Répondre

6

Les autres solutions sont de meilleures réponses à la question spécifique. Cela dit, il est bon d'apprendre la façon la plus générale de créer des variables globales:

# inner scope 
Set-Variable -name DynFEx -value 'function DynF() {"Hello DynF"}' -scope global 

# somewhere other scope 
Invoke-Expression $dynfex 
DynF 

Lire « aide about_Scopes » pour plus d'informations tonnes.

8

Vous pouvez limiter la portée de la fonction avec le mot-clé global:

function global:DynF {...} 
+0

Dans le code ci-dessus, 'function global: DynF {...}' est probablement plus logique. ;-). –

+0

Merci pour la correction! Je vais éditer le fil. –

13

Une autre option serait d'utiliser le Set-Item -Path function:global:ChildFunction -Value {...}

En utilisant Set-Item, vous pouvez passer une chaîne ou un bloc de script à la valeur pour la définition de la fonction.

+1

Passer un _script block_ à '-Value' fonctionne très bien, mais passer un _string_ ne fonctionne pas comme prévu: alors que' Set-Item' l'accepte, invoquer la fonction puis simplement _echoes_ la chaîne de définition avec les accolades dépouillées. Vous pouvez contourner cela avec '&', mais c'est gênant et je ne suis pas sûr qu'il y ait des effets secondaires (par exemple, 'set-item function: foo" & {'arg 0:' + '$ args [0]} '@args"; foo 'hi'' - préférable d'utiliser 'Invoke-Expression' si vous avez besoin de construire le corps de la fonction dans une chaîne. – mklement0

Questions connexes