Powershell 方法返回字符串,但被指定为字符串[]
我有以下代码:Powershell 方法返回字符串,但被指定为字符串[],powershell,Powershell,我有以下代码: [string]$emailBody = getEmailBody $firstName $emailTemplateFileContent function getEmailBody($firstName, $emailTemplateFileContent) { $sb = New-Object Text.StringBuilder for ($i = 1; $i -lt $emailTemplateFileContent.Length; $i++)
[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
}
当我键入$EmailTemplateTextCustomized.getType()
时,我可以看到它是一个字符串
但是,当我键入$emailBody.getType()
时,我可以看到它是一个数组
我还可以看到数组有8个字符串,每个字符串包含getEmailBody()
的输出
更新:
Powershell似乎真的有问题,它不再是一个String[]
,而是一个String
,重复了8次getEmailBody()
的输出
为什么要这样做?
提前感谢。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
}
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
}
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
}
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
}
这很有效,谢谢!我仍然有点困惑,StringBuilder.AppendLine()返回StringBuilder是什么意思,它返回到哪里?在我的代码中,我返回的唯一变量是$EmailTemplateTextCustomized,在调试中我可以看到它是一个普通字符串,本身没有8个重复。该方法的“返回值”是一个StringBuilder实例。您不会将其分配给变量(或重定向到null),以便将对象添加到函数的输出中。强制转换到void
也可以避免将值输出到管道:[void]$sb.AppendLine($emailTemplateFileContent[$i])
是,管道到Out null
也是如此,StringBuilder
有自己的方法。这很有效,谢谢!我仍然有点困惑,StringBuilder.AppendLine()返回StringBuilder是什么意思,它返回到哪里?在我的代码中,我返回的唯一变量是$EmailTemplateTextCustomized,在调试中我可以看到它是一个普通字符串,本身没有8个重复。该方法的“返回值”是一个StringBuilder实例。您不会将其分配给变量(或重定向到null),以便将对象添加到函数的输出中。强制转换到void
也可以避免将值输出到管道:[void]$sb.AppendLine($emailTemplateFileContent[$i])
是,管道到Out null
也是如此,StringBuilder
有自己的方法。这很有效,谢谢!我仍然有点困惑,StringBuilder.AppendLine()返回StringBuilder是什么意思,它返回到哪里?在我的代码中,我返回的唯一变量是$EmailTemplateTextCustomized,在调试中我可以看到它是一个普通字符串,本身没有8个重复。该方法的“返回值”是一个StringBuilder实例。您不会将其分配给变量(或重定向到null),以便将对象添加到函数的输出中。强制转换到void
也可以避免将值输出到管道:[void]$sb.AppendLine($emailTemplateFileContent[$i])
是,管道到Out null
也是如此,StringBuilder
有自己的方法。这很有效,谢谢!我仍然有点困惑,StringBuilder.AppendLine()返回StringBuilder是什么意思,它返回到哪里?在我的代码中,我返回的唯一变量是$EmailTemplateTextCustomized,在调试中我可以看到它是一个普通字符串,本身没有8个重复。该方法的“返回值”是一个StringBuilder实例。您不会将其分配给变量(或重定向到null),以便将对象添加到函数的输出中。强制转换到void
也可以避免将值输出到管道:[void]$sb.AppendLine($emailTemplateFileContent[$i])
是,管道到Out null
也是如此,StringBuilder
有自己的方法。