将多行字符串传递给 PowerShell 函数参数

Passing multi-line string to PowerShell function parameter

提问人:Fajela Tajkiya 提问时间:7/7/2023 更新时间:7/8/2023 访问量:34

问:

我有以下代码:

function Main{

    $param1 = @"
aaa
bbb
ccc
"@
    Test -Param1 $param1
}

function Test {
    param (
        [Parameter(Mandatory)][string]$Param1
    )

    Write-Host $Param1
    Write-Host $Param1.GetType()
    Write-Host $Param1[0]

    Write-Host '---------------------'
    $Param1 = [regex]::split($Param1.trim(), "\r?\n");
    $Param1 = @(foreach($line in $Param1) {
        if($line -match '^\s*$') {
            continue
        }
        $line
    })

    Write-Host $Param1
    Write-Host $Param1.GetType()
    Write-Host $Param1[0]
}

Main

基本上,我希望该函数可以接受字符串参数。如果它是一个多行字符串,那么我将用换行符拆分它并使其成为一个数组。但是,当我运行它时,我得到了以下输出:Test

aaa
bbb
ccc
System.String
a
---------------------
aaa bbb ccc
System.String
a

如您所见,该功能似乎没有按预期工作。多行 heredoc 字符串肯定包含换行符。但是该函数无法按这些换行符拆分它。问题出在哪里?splitsplit

数组字符串 powershell 函数参数

评论


答:

0赞 Santiago Squarzon 7/7/2023 #1

您的拆分按预期工作,问题是被限制为 a 和数组,当强制字符串时,数组会被 $OFS(默认为空格)连接。$Param1string

基本上:

[string] @(@'
aaa
bbb
ccc
'@ -split '\r?\n') # => aaa bbb ccc

如果要重用该变量名称,则需要再次将其约束为:string[]

[string[]] $Param1 = @(foreach($line in $Param1) {