0

我有这个脚本文件包含:

   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. 如果脚本块包含 IF 语句,则执行失败并出现错误,例如“术语 'someofArguments' 未被识别为 cmdlet 的名称......”。

但如果没有 IF 语句,一切正常。那么如何使用 IF 语句发送该脚本块呢?

  1. 如何避免在带有变量 $true、$false 和主要是 $null 的 $command 中使用反引号?因为没有反引号,它们被翻译为 true、false 和nothing

谢谢你。

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

编辑:我想出了这个解决方案,但它不是很好。有人知道比这样放反引号更简单的解决方案吗?

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

0 回答 0