Powershell 从脚本中提取参数块

Powershell 从脚本中提取参数块,powershell,abstract-syntax-tree,Powershell,Abstract Syntax Tree,我想提取PowerShell脚本的param块。 我已经读过AST解析器可以实现这一点,但我找不到有用的代码片段 这里有一个字符串,我只想将param块提取为字符串 $scriptBlock = @' Param ( [Parameter(Mandatory=$true)][string]$param1, [Parameter(Mandatory=$true)][string]$param2, [Parameter(Mandatory=$true)][switch]$pa

我想提取PowerShell脚本的param块。 我已经读过AST解析器可以实现这一点,但我找不到有用的代码片段

这里有一个字符串,我只想将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)
'@

感谢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()
.