2009-07-14 19 views
5

下面是一个例子:如何动态创建可在父范围内访问的函数?

function ChildF() 
{ 
    #Creating new function dynamically 
    $DynFEx = 
@" 
    function DynF() 
    { 
    "Hello DynF" 
    } 
"@ 
    Invoke-Expression $DynFEx 
    #Calling in ChildF scope Works 
    DynF 
} 
ChildF 
#Calling in parent scope doesn't. It doesn't exist here 
DynF 

我想知道你是否能以这样的方式定义DynF它是ChildF的“可见”之外。

回答

6

其他解决方案更好地解答具体问题。这就是说,它是很好的学习的最一般的方法来创建全局变量:

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

# somewhere other scope 
Invoke-Expression $dynfex 
DynF 

读的帮助参阅about_Scopes“为万吨以上信息。

8

您可以范围与global关键字功能:

function global:DynF {...} 
+0

在上面给出的代码中,`function global:DynF {...}`可能更有意义。 ;-)。 – 2009-07-14 10:18:52

+0

感谢您的更正!我将编辑该线程。 – 2009-07-14 15:30:14

13

另一种选择是使用Set-Item -Path function:global:ChildFunction -Value {...}

使用Set-Item,你可以传递一个字符串或脚本块价值为函数的定义。