Here is an example:
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
I was wondering whether you could define DynF in such a way that it is "visible" outside of ChildF.
A more correct and functional way to do this would be to return the function body as a script block and then recompose it.
The other solutions are better answers to the specific question. That said, it's good to learn the most general way to create global variables:
Read 'help about_Scopes' for tons more info.
Another option would be to use the
Set-Item -Path function:global:ChildFunction -Value {...}
Using
Set-Item
, you can pass either a string or a script block to value for the function's definition.You can scope the function with the
global
keyword: