带有额外换行的字符串

String coming with an extra new line

下面是我从文本文件中获取服务器名称并用逗号连接的代码。 但是当我打印该值时,它会在值之后额外换行。

我试过 $erversToReboot.Trim(),但没用。

$ServerList = Get-Content "D:\ServerName.txt"
$Servers=""
foreach($Server in $ServerList)
{

        $Servers += $Server + ","

}

[string]$ServersToReboot= $Servers.TrimEnd(",")

输出为

server1,server2
---one extra line here---

请告诉我这里出了什么问题。

据我所知,您正试图用逗号分隔您的服务器。我会自己跳过 Foreach 构造并简单地使用连接运算符。

$ServerList = Get-Content -Path 'D:\ServerName.txt'
$ServerList -join ','

这也可以在一条语句中完成。

$ServerList = (Get-Content -Path 'D:\ServerName.txt') -join ','

汤米

正如其他人指出的那样,使用 -join 运算符将输入行与可指定的分隔符连接起来通常要简单得多。

至于多出一个空行的问题:Gert Jan Kraaijeveld 振振有词的是你的输入文件末尾多了一个空行,同时注意到实际上不是 你发布的代码会发生什么,应该可以正常工作(尽管效率低下)。

也许额外的一行是您如何打印结果值的人为因素。


回答相关问题如何忽略输入文件中的空行:

假设可以简单地从输入中删除 all 个空行,最简单的 PowerShell 惯用解决方案是:

@(Get-Content D:\ServerName.txt) -ne '' -join ','

@(Get-Content D:\ServerName.txt) returns 作为字符串数组[1] 的输入行,来自
-ne ''然后删除空行,其结果 -join 与分隔符 ,

连接

[1] Get-Content D:\ServerName.txt 会 return 一个 标量 (单个字符串),如果输入文件碰巧只包含 1 行,因为 PowerShell 通常将 单个 输出对象 报告为自身 而不是 单元素数组 当管道输出被收集.
因此,@(...) 数组子表达式运算符 - 而不仅仅是 (...) - 在上述命令中是必需的:它确保 Get-Command 的输出被视为 array,因为 -ne 运算符与 scalar LHS 和 returns a Boolean[=66= 的行为不同] 而不是过滤 LHS 的元素:比较 'foo' -ne ''@('foo') -ne ''.
相比之下,如果您将结果(直接)传递给 -join(这只是一个 no-op 标量 LHS):
(Get-Content D:\ServerName.txt) -join ','