【问题标题】:Join an array with newline in PowerShell在 PowerShell 中加入带有换行符的数组
【发布时间】:2013-12-03 14:41:50
【问题描述】:

我有一个名称数组,我正在尝试使用换行符加入这些名称。我有以下代码

$body = $invalid_hosts -join "`r`n"
$body = "The following files in $Path were found to be invalid and renamed `n`n" + $body

最后,我通过电子邮件发送内容。

$From = "myaddress@domain.com"
$To = "myaddress@domain.com
$subject = "Invalid language files"

Send-MailMessage -SmtpServer "smtp.domain.com" -From $From -To $To -Subject $subject -Body $body

当我收到消息时,The following files in <filepath> were found to be invalid and renamed 行有预期的双倍空格,但 $invalid_hosts 的内容都在一行上。我也试过做

$body = $invalid_hosts -join "`n"

$body = [string]::join("`n", $invalid_hosts)

这两种方法都行不通。我需要做什么才能完成这项工作?

【问题讨论】:

  • 这不是重复的,因为在纯文本模式下使用 Send-MailMessage 时,此问题特别出现在电子邮件正文中。

标签: powershell join


【解决方案1】:

将数组传递给Out-String cmdlet,以将它们从字符串对象的集合转换为单个字符串:

PS> $body = $invalid_hosts -join "`r`n" | Out-String

【讨论】:

  • @Robbert,你一定是搞错了。尝试对 $body 进行硬编码,看看会发生什么:$body = "This`nIs`nA`nTest"
  • 它和我上面描述的一样。最后,我认为问题可能是 Outlook 完成的格式设置,并将输出更改为 HTML 消息。我没有使用换行符,而是使用<br/> 加入了数组。
  • join "`r`n"| Out-String 不是多余的吗?为什么在同一个命令中同时使用两者?
  • 我遇到了与@Robbert 相同的问题 - 它仅在以“
    ”作为分隔符的 HTML 格式发送电子邮件时加入字符串数组时对我有效。
【解决方案2】:

只需管道到 Out-String 就足够了(请参阅 https://stackoverflow.com/a/21322311/52277

 $result = 'This', 'Is', 'a', 'cat'
 $strResult = $result  | Out-String
 Write-Host $strResult
This
Is
a
cat

【讨论】:

    【解决方案3】:

    我不确定如何回答其他所有问题,但对于 Powershell 中的保证换行符,请使用: [Environment]::NewLine 代替你的 "`n"

    【讨论】:

    • 这对我有用,使用 `r`n 只需输出 `r`n
    【解决方案4】:

    今天必须解决这个问题;以为我会分享我的答案,因为问题和其他答案帮助我找到了解决方案。而不是

    $body = $invalid_hosts -join "`r`n"
    $body = "The following files in $Path were found to be invalid and renamed `n`n" + $body
    

    使用

    $MessageStr = "The following files in " + $Path + " were found to be invalid and renamed"
    $BodyArray = $MessageStr + $Invalid_hosts
    $Body = $BodyArray -join "`r`n"
    

    【讨论】:

      【解决方案5】:

      我当然不是 PowerShell 方面的专家,但我找到了一种更简单的方法。只需像这样通过管道发送到Write-Host

      $array = 'This', 'Is', 'a', 'cat'
      $array | Write-Host
      
      Output:
      This
      Is
      a
      cat
      

      这是一个与 OP 问题略有不同的用例。它不会用换行符加入数组,但在写入输出时会给出换行符。

      【讨论】:

        【解决方案6】:

        我的做法不同,只是替换了换行符

        $result -replace("`r`n"," ")
        

        【讨论】:

        • 这会做相反的事情,用空格替换换行符。
        猜你喜欢
        • 1970-01-01
        • 2017-09-07
        • 1970-01-01
        • 2021-08-04
        • 1970-01-01
        • 1970-01-01
        • 2018-12-27
        • 1970-01-01
        • 2021-12-16
        相关资源
        最近更新 更多