在脚本级别上的DynamicParam块之后的任何代码都被解析为语法错误

时间:2016-08-19 14:18:28

标签: powershell

我正在尝试在脚本级别使用 DynamicParam 。互联网上的所有示例都显示功能级别。只要我在DynamicParam {}之后没有代码,它就可以工作(我可以在调试器中停止在块中),但是之后添加的任何代码都是语法错误。我已经看到一些建议应该使用begin / process / end并且我尝试了它并且它没有任何影响。

我有这个用于概念证明:

MyScript.ps1

[CmdletBinding()]
Param(
 [parameter()]
 [string] $a,

 [parameter()]
 [string] $b,

 [parameter()]
 [string] $c
)
DynamicParam
{
  if($a -match 'aaa') 
  {
     # .......
     # creates dynamic param here
     # .......
  }
}

# Anything below this line is not accepted by powershell parser
# Next line will cause powershell to generate: "Unexpected token '$x' in expression or statement" error.
$x = 10 

如果我添加:

begin {}
process {}
end {}

我仍然无法添加任何代码。

也许是一些我看不到的愚蠢错误;我被卡住了。

Powershell版本:

$PSVersionTable.PSVersion
Major Minor Build Revision
----- ----- ----- ---------
4      0    -1    -1

1 个答案:

答案 0 :(得分:2)

如果使用DynamicParam块,PowerShell希望您的代码至少包含ProcessBeginEnd块中的一个。所以你的脚本可能如下所示:

[CmdletBinding()]
Param(
 [parameter()]
 [string] $a,

 [parameter()]
 [string] $b,

 [parameter()]
 [string] $c
)
DynamicParam
{
  if($a -match 'aaa') 
  {
     # .......
     # creates dynamic param here
     # .......
  }
}

Process 
{
# Anything below this line is not accepted by powershell parser
$x = 10 # This will cause powershell to generate: "Unexpected token '$x' in expression or statement"
}