提问人:Fajela Tajkiya 提问时间:7/7/2023 更新时间:7/8/2023 访问量:34
将多行字符串传递给 PowerShell 函数参数
Passing multi-line string to PowerShell function parameter
问:
我有以下代码:
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 字符串肯定包含换行符。但是该函数无法按这些换行符拆分它。问题出在哪里?split
split
答:
0赞
Santiago Squarzon
7/7/2023
#1
您的拆分按预期工作,问题是被限制为 a 和数组,当强制字符串时,数组会被 $OFS
(默认为空格)连接。$Param1
string
基本上:
[string] @(@'
aaa
bbb
ccc
'@ -split '\r?\n') # => aaa bbb ccc
如果要重用该变量名称,则需要再次将其约束为:string[]
[string[]] $Param1 = @(foreach($line in $Param1) {
下一个:C 在函数参数中使用数组变量?
评论