首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将参数块后的语句插入到PowerShell Here-String中

将参数块后的语句插入到PowerShell Here-String中
EN

Stack Overflow用户
提问于 2017-09-16 18:47:14
回答 1查看 87关注 0票数 2

我有一个here字符串,我想在参数块后面注入一条语句。挑战是,我不知道Here-String的结构,它应该适用于所有类型的Here-String(有或没有param块)。

例如:

代码语言:javascript
复制
$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块之后,我想注入以下语句。

代码语言:javascript
复制
Set-Location C:\temp

结果应该如下所示:

代码语言:javascript
复制
$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"
EN

回答 1

Stack Overflow用户

发布于 2020-09-15 09:40:20

这个怎么样?

代码

代码语言:javascript
复制
$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

结果

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46253018

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档