我有这段代码:
[string]$emailBody = getEmailBody $firstName $emailTemplateFileContent
function getEmailBody($firstName, $emailTemplateFileContent)
{
$sb = New-Object Text.StringBuilder
for ($i = 1; $i -lt $emailTemplateFileContent.Length; $i++)
{
$sb.AppendLine($emailTemplateFileContent[$i])
}
$emailTemplateText = $sb.ToString()
$emailTemplateTextCustomised = $emailTemplateText.Replace("#name", $firstName)
return $emailTemplateTextCustomised
}
当我输入$emailTemplateTextCustomised.getType()
时,我可以看到它是string
。
但是当我输入$emailBody.getType()
时,我可以看到它是一个数组。
我还可以看到数组有8个字符串,每个字符串包含getEmailBody()
的输出。
更新:
Powershell似乎真的有些错误,它不再是String[]
而只是String
,其中getEmailBody()
的输出重复8次。
为什么这样做? 提前谢谢。
答案 0 :(得分:3)
PowerShell没有错误,至少在这种情况下不是这样。 :-)您必须明白,在PowerShell中,函数的“输出”是未捕获到变量的任何内容。执行StringBuilder.AppendLine()
的行返回StringBuilder,并将其添加到函数的输出中。试试这个:
function getEmailBody($firstName, $emailTemplateFileContent)
{
$sb = New-Object Text.StringBuilder
for ($i = 1; $i -lt $emailTemplateFileContent.Length; $i++)
{
$sb.AppendLine($emailTemplateFileContent[$i]) > $null
}
$emailTemplateText = $sb.ToString()
$emailTemplateText.Replace("#name", $firstName)
}
如果你在V3(也许是V2),你也可以使用-replace运算符:
function getEmailBody($firstName, $emailTemplateFileContent)
{
$sb = New-Object Text.StringBuilder
for ($i = 1; $i -lt $emailTemplateFileContent.Length; $i++)
{
$sb.AppendLine($emailTemplateFileContent[$i]) > $null
}
$emailTemplateText = $sb.ToString() -replace '#name',$firstName
$emailTemplateText
}