下面是一个例子:
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的“可见”之外。
其他的解决方案是对具体问题更好的答案。 这就是说,它是很好的学习创建全局变量的最一般的方法:
# inner scope
Set-Variable -name DynFEx -value 'function DynF() {"Hello DynF"}' -scope global
# somewhere other scope
Invoke-Expression $dynfex
DynF
阅读“帮助参阅about_Scopes”为万吨以上信息。
另一种选择是使用Set-Item -Path function:global:ChildFunction -Value {...}
使用Set-Item
,你可以通过一个字符串或脚本块函数的定义值。
您可以域内具有功能global
关键字:
function global:DynF {...}
要做到这一点更正确和实用的方法是将函数体返回的脚本块,然后重新它。
function ChildF() {
function DynF() {
"Hello DynF"
}
return ${function:DynF}
}
$DynFEx = ChildF
Invoke-Expression -Command "function DynF { $DynFEx }"
DynF
文章来源: How do I dynamically create functions that are accessible in a parent scope?