Powershell:传递内部代码块 - 混淆参数

时间:2014-08-01 20:48:20

标签: function powershell recursion parameter-passing codeblocks

我已经创建了一个递归函数来格式化我的控制台输出,但是我在尝试将任何参数传递给下一个递归时遇到了麻烦。

以下是该功能的相关部分:

function exo {
    Param(
        [Parameter]$function,
        [Parameter][string]$message,
        [Parameter]$alt,
        [switch]$continue, [switch]$return, [switch]$skip
    )
    Process {
   ...
        if($alt) {
            $out = exo $alt -return:$return -continue:$continue
        }
   ...

问题在于,当我将块中的第二个exo传递给第一个时,powershell包含了作为该块的一部分的所有内容,甚至是消息和开关。

以下是一个例子:

exo { write-host "This block executes first" } "Message for this block" `
    { exo { write-host "This block executes next" } "But the closing bracket doesn't register, and this message is executed as code" }

逃离支架似乎没有办法解决问题。有没有办法将参数传递给递归函数?

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您的第一个问题是您没有正确使用[Parameter()]属性。 parens是必需的:

function exo {
    Param(
        [Parameter()]$function,
        [Parameter()][string]$message,
        [Parameter()]$alt,
        [switch]$continue, 
        [switch]$return, 
        [switch]$skip
    )
    ...
}

在修复之后似乎是递归,虽然第二次通过exo $ alt是$ null,因此它不会根据你的代码片段再次执行$ function AFAICT。