如果我使用类型为[scriptblock]
的参数创建PowerShell函数,那么哪种方法最适合执行该函数中的脚本块?还有为什么?
我知道以下选项:
.
源运营商&
(呼叫)运算符Invoke-Expression
答案 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()
方法。