gpt4 book ai didi

powershell - 将匿名多行函数作为参数传递给另一个函数

转载 作者:行者123 更新时间:2023-12-03 00:30:07 25 4
gpt4 key购买 nike

假设有一个函数将两个函数作为参数:

function do_until([scriptblock] $f, [scriptblock] $p, [System.TimeSpan] $timeout = (New-Timespan -Minutes 5), [System.TimeSpan] $delay = (New-Timespan -Seconds 5))
{
$timer = [diagnostics.stopwatch]::StartNew()
do
{
$f.Invoke()
Start-Sleep $delay.Seconds
} until ($p.Invoke() -or $timer.elapsed -ge $timeout)
}

这有效:
do_until { "hi!" } { 1 -gt 2 } (New-Timespan -Seconds 10) (New-Timespan -Seconds 1)

这失败了
do_until 
{
"hi!"
"and again!"
} { 1 -gt 2 } (New-Timespan -Seconds 10) (New-Timespan -Seconds 1)

有错误
At C:\c\powershell\functions.ps1:15 char:3
+ } { 1 -gt 2 } (New-Timespan -Seconds 10) (New-Timespan -Seconds 1)
+ ~
Unexpected token '{' in expression or statement.
At C:\c\powershell\functions.ps1:15 char:15
+ } { 1 -gt 2 } (New-Timespan -Seconds 10) (New-Timespan -Seconds 1)
+ ~
Unexpected token '(' in expression or statement.
At C:\c\powershell\functions.ps1:15 char:42
+ } { 1 -gt 2 } (New-Timespan -Seconds 10) (New-Timespan -Seconds 1)
+ ~
Unexpected token '(' in expression or statement.
+ CategoryInfo : ParserError: (:) [], ParseException
+ FullyQualifiedErrorId : UnexpectedToken

如何将此匿名多行函数作为 do_until的参数传递?

最佳答案

PowerShell正在将do_until解释为完整的命令。代替:

1)在函数调用的同一行上启动脚本块(开头的{不会形成完整的表达式,因此PowerShell将继续解析为以下几行)。

do_until {
"hi!"
"and again!"
} { 1 -gt 2 } (New-Timespan -Seconds 10) (New-Timespan -Seconds 1)

2)使用 `转义字符将有关多行命令的信息告知PowerShell。
do_until `
{
"hi!"
"and again!"
} { 1 -gt 2 } (New-Timespan -Seconds 10) (New-Timespan -Seconds 1)

3)在调用函数之前将脚本块保存到变量中(就像打开的 {一样,PowerShell将在 =分配不完整之后继续解析)。
$action =
{
"hi!"
"and again!"
}

do_until $action { 1 -gt 2 } (New-Timespan -Seconds 10) (New-Timespan -Seconds 1)

关于powershell - 将匿名多行函数作为参数传递给另一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20826585/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com