参数有一个功能

时间:2013-05-22 16:36:57

标签: powershell

在Powershell中,我可以将函数作为函数的参数传递吗?

Test (!((Get-SPSolution $name).Deployed))

Function Test {
    param ($extFunc)

    do { Start-Sleep -Seconds 30 } while ($extFunc)
}

2 个答案:

答案 0 :(得分:2)

您可以尝试这样:

Test "(!((Get-SPSolution $name).Deployed))"

Function Test {
    param ($extFunc)

    do { Start-Sleep -Seconds 30 } while ((iex $extFunc))
}

[string]传递到Test函数并使用invoke-expression cmdlet

答案 1 :(得分:2)

你应该能够毫无问题地做到这一点。但有一点,您需要在声明它之后调用测试函数,否则您将收到错误(术语“测试”不被识别为cmdlet的名称)。

以下是演示它的示例,您应该每秒都看到写入控制台的消息。

function Test-SPSolution
{
    New-Object PSObject -Property @{Deployed=$false}
}

Function Test {
    param ($extFunc)

    do { 
        Start-Sleep -Seconds 1
        Write-Host "extFunc = $extFunc"
    } while ($extFunc)
}

Test (!(Test-SPSolution foo).Deployed)