如何在PowerShell函数中执行脚本块参数?

时间:2019-01-09 12:04:55

标签: powershell

如果我使用类型为[scriptblock]的参数创建PowerShell函数,那么哪种方法最适合执行该函数中的脚本块?还有为什么

我知道以下选项:

  • .源运营商
  • &(呼叫)运算符
  • Invoke-Expression

1 个答案:

答案 0 :(得分:3)

. current 范围内运行脚本块。 & child 范围内运行脚本块(与通过其Invoke()方法运行scripblock相同)。您要使用哪一个取决于您要实现的结果。

演示:

通过Invoke()方法运行:

PS C:\> $s = { $a = 2; $a }
PS C:\> $a = 1
PS C:\> $s.Invoke()
2
PS C:\> $a
1

通过呼叫运营商运行:

PS C:\> $s = { $a = 2; $a }
PS C:\> $a = 1
PS C:\> & $s
2
PS C:\> $a
1

通过网点外包运营商运行:

PS C:\> $s = { $a = 2; $a }
PS C:\> $a = 1
PS C:\> . $s
2
PS C:\> $a
2

如果您需要脚本块来修改当前范围内的某些内容,请使用.运算符。否则,请使用呼叫运算符或Invoke()方法。

Do not use Invoke-Expression