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

Mat*_*and 1 powershell

如果我创建一个参数类型为 的 PowerShell 函数[scriptblock]哪种方法最适合执行函数内的脚本块?为什么?

我知道以下选项:

  • .源算子
  • &(呼叫)操作员
  • Invoke-Expression

Ans*_*ers 5

.在当前范围内运行脚本块。在子&作用域中运行 scriptblock (与通过其方法运行 scripblock 相同)。您想使用哪一种取决于您想要实现的结果。Invoke()

示范:

通过方法运行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()方法。

不使用Invoke-Expression