2009-07-14 5 views

Antwort

6

Die anderen Lösungen sind bessere Antworten auf die spezifische Frage. Das heißt, es ist gut, die allgemeinste Art und Weise zu lernen, globale Variablen zu erstellen:

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

# somewhere other scope 
Invoke-Expression $dynfex 
DynF 

Read ‚Hilfe about_Scopes‘ für jede weitere Informationen.

8

Sie können Umfang die Funktion mit dem global Stichwort:

function global:DynF {...} 
+0

In dem obigen Code macht 'function global: DynF {...}' wahrscheinlich mehr Sinn. ;-). –

+0

Danke für die Korrektur! Ich werde den Thread bearbeiten. –

13

Eine weitere Möglichkeit der Set-Item -Path function:global:ChildFunction -Value {...}

Set-Item Verwendung zu verwenden wäre, können Sie entweder einen String oder einen Skriptblock an Wert für den Pass Definition der Funktion.

+1

Das Übergeben eines _script block_ an "-Value" funktioniert großartig, aber die Übergabe eines _string_ funktioniert nicht wie beabsichtigt: während 'Set-Item' es akzeptiert, ruft die Funktion dann _echoes_ den Definitions-String auf, wobei die geschweiften Klammern entfernt werden. Sie können das mit '&' umgehen, aber es ist peinlich und ich bin mir nicht sicher, ob es Nebenwirkungen hat (zB 'set-item function: foo '& {' arg 0: '+' $ args [0]} '@args"; foo 'hi'' - besser, 'Invoke-Expression' zu verwenden, wenn Sie den Funktionskörper in einer Zeichenfolge erstellen müssen. – mklement0