我有这个脚本文件包含:
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 语句发送该脚本块呢?
- 如何避免在带有变量 $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}
"@