从脚本中提取param块

时间:2017-04-22 21:31:39

标签: powershell abstract-syntax-tree

我想提取PowerShell脚本的param块。 我已经阅读了AST解析器可以实现但我找不到一个有用的片段。

我有这个Here-String,我只想将param块提取为字符串。

$scriptBlock = @'
Param (
    [Parameter(Mandatory=$true)][string]$param1,
    [Parameter(Mandatory=$true)][string]$param2,
    [Parameter(Mandatory=$true)][switch]$param3
)
Write-Output ('param1: {0}' -f $param1)
Write-Output ('param2: {0}' -f $param2)
Write-Output ('param3: {0}' -f $param3)
'@

1 个答案:

答案 0 :(得分:1)

感谢Ansgar Wiechers的灵感。

我找到了解决这个问题的方法。这是可行的解决方案:

$scriptBlock = @'
Param (
    [Parameter(Mandatory=$true)][string]$param1,
    [Parameter(Mandatory=$true)][string]$param2,
    [Parameter(Mandatory=$true)][switch]$param3
)
Write-Output ('param1: {0}' -f $param1)
Write-Output ('param2: {0}' -f $param2)
Write-Output ('param3: {0}' -f $param3)
'@

[ref]$tokens = $null
[ref]$parseErrors = $null
$paramBlock = ([Management.Automation.Language.Parser]::ParseInput($scriptBlock, $parseErrors,$tokens)).ParamBlock.toString()