Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 方法返回字符串,但被指定为字符串[]_Powershell - Fatal编程技术网

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
有自己的方法。