我正在尝试在脚本级别使用 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
答案 0 :(得分:2)
如果使用DynamicParam
块,PowerShell希望您的代码至少包含Process
,Begin
或End
块中的一个。所以你的脚本可能如下所示:
[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"
}