使用IF语句作为函数参数的Scriptblock

时间:2014-07-01 09:05:58

标签: powershell parameters scriptblock

我有这个脚本文件包含:

   function run_command 
{
    param    
    (
        [string] $scriptblock
    )

    $sb = [Scriptblock]::Create($scriptblock)
    Start-Job -ScriptBlock $sb | Wait-Job | Receive-Job
}

$a = "aaa"

$scriptblock = @"
if($a){echo $a}
else {echo nene}
"@

run_command -scriptblock $scriptblock

我有两个问题: 1.如果scriptblock包含IF语句,则执行失败,错误如"术语' someofArguments'不被识别为cmdlet的名称..."。

但如果没有IF声明,一切正常。那么如何使用IF语句发送该scriptblock?

  1. 如何避免在$ command中使用带有变量$ true,$ false和$ null的反引号?因为没有反引号,它们会被转换为true,false和 nothing
  2. 谢谢。

    PS:我发现了这个主题PowerShell function with parameterized script block和类似帖子,他们说将scriptblock作为字符串发送,并且在函数本身将其转换为类型scriptblock。

    编辑: 我找到了这个解决方案,但它并不是很好。有人知道更容易解决问题,而不是像这样提出反击吗?

    $scriptblock = @"
    `$a=`"$a`"
    if(`$a){echo `$a}
    else {echo nene}
    "@
    

0 个答案:

没有答案