具有本地定义的嵌套函数的 Invoke-Command

具有本地定义的嵌套函数的 Invoke-Command

我已经搜索了这个问题很长时间但似乎无法找到我认为非常有用的东西的正确语法。

我想使用 Invoke-Command 调用本地函数,其中包括其他本地定义的函数。

以下是一个粗略的例子:

Function foo1{
}
Function foo2{
foo1
}
invoke-command -ComputerName SERVERNAME -Credential WHATERVER -ScriptBlock ${Function:foo2}

我几乎使所有事情都正常工作,除了从“foo2”内部调用函数“foo1”不起作用之外。

正确的做法是什么?

答案1

您的foo1函数在函数内部不可见foo2。即使foo1函数是在全局范围内声明的 ( Function Global:foo1),它也是有效的。

使用嵌套函数如下:

Function foo2 {

    Function foo1 {
        'FOO1: {0} "{1}" :(' -f $MyInvocation.MyCommand.CommandType, 
            $MyInvocation.MyCommand.Name
    }

    foo1

    'FOO2: {0} "{1}" :)' -f $MyInvocation.MyCommand.CommandType, 
        $MyInvocation.MyCommand.Name
}
#foo2              ### debugging output
#"---" 
#foo1              ### would work if delared `Function script:foo1` (or global)
#"---" 
Invoke-Command -ComputerName SERVERNAME -Credential WHATERVER -ScriptBlock ${Function:foo2}

输出证明foo2CommandType 是脚本

PS D:\PShell> D:\PShell\SF\810352.ps1
FOO1: Function "foo1" :(
FOO2: Script "" :)
PS D:\PShell>

相关内容