我有一个here字符串,我想在参数块后面注入一条语句。挑战是,我不知道Here-String的结构,它应该适用于所有类型的Here-String(有或没有param块)。
例如:
$scriptBlock = @'
Param (
[Parameter(Mandatory=$false)][string]$param1,
[Parameter(Mandatory=$false)][string]$param2,
[Parameter(Mandatory=$false)][switch]$param3
)
Write-Output ('param1: {0}' -f $param1)
Write-Output ('param2: {0}' -f $param2)
Write-Output ('param3: {0}' -f $param3)
Get-Location
'@
invoke-expression "$scriptBlock"在param块之后,我想注入以下语句。
Set-Location C:\temp结果应该如下所示:
$scriptBlock = @'
Param (
[Parameter(Mandatory=$false)][string]$param1,
[Parameter(Mandatory=$false)][string]$param2,
[Parameter(Mandatory=$false)][switch]$param3
)
Set-Location C:\temp
Write-Output ('param1: {0}' -f $param1)
Write-Output ('param2: {0}' -f $param2)
Write-Output ('param3: {0}' -f $param3)
Get-Location
'@
invoke-expression "$scriptBlock"发布于 2020-09-15 09:40:20
这个怎么样?
代码
$scriptcontent = [System.Management.Automation.Language.Parser]::ParseInput($scriptblock, [ref]$null, [ref]$null)
$paramblock = $scriptcontent.ParamBlock
if ($paramblock) {
$scriptblock = $scriptblock.Replace($paramblock.Extent.Text, $paramblock.Extent.Text + "`nSet-Location C:\temp;`n")
}
$scriptblock结果
Param (
[Parameter(Mandatory=$false)][string]$param1,
[Parameter(Mandatory=$false)][string]$param2,
[Parameter(Mandatory=$false)][switch]$param3
)
Set-Location C:\temp;
Write-Output ('param1: {0}' -f $param1)
Write-Output ('param2: {0}' -f $param2)
Write-Output ('param3: {0}' -f $param3)
Get-Locationhttps://stackoverflow.com/questions/46253018
复制相似问题