从脚本块动态创建PowerShell脚本块

5
我希望编写一个PowerShell函数,根据输入参数动态创建脚本块并返回。但是我目前似乎遇到了一些困难。
编写一个方法来调用脚本块两次很容易。
$x = { write-host "Hello" }
function DoIt([scriptblock] $s) { $s.Invoke(); }
function DoItTwice([scriptblock] $s) { $s.Invoke(); $s.Invoke(); }

DoIt($x)
DoItTwice($x)

编写一个返回脚本块的方法,该脚本块具有调用(输入)脚本块两次的效果,这比较困难。以下内容无法正常工作:

function TwiceAsScriptBlock([scriptblock] $s)
{
    function twice
    {
        $s.Invoke();
        $s.Invoke();
    }
    return { twice }
}
1个回答

10

这个会对你有用:

function TwiceAsScriptBlock([scriptblock] $s)
{

    $ScriptBlock = [System.Management.Automation.ScriptBlock]::Create("$s ; $s")
    Return $ScriptBlock 
}

Powershell Return Scriptblock


我尝试了类似这样的变体。如果我在返回的脚本块上调用Invoke(),我会得到以下错误: TwiceAsScriptBlock:无法处理参数's'上的参数转换。 - Rob
它对我起作用了,我会放一张截图。你运行的PowerShell版本是哪个? - Musaab Al-Okaidi
请检查更新后的答案,当我调用新的脚本块时,可以看到它输出了两次消息。 - Musaab Al-Okaidi
好的 - 我想我已经盯着这个太久了。我试图使用 TwiceAsNewScriptBlock($x).Invoke() - 这就是为什么我认为它不起作用的原因。谢谢! - Rob

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接