字符串带有额外的新行

时间:2019-01-30 16:39:21

标签: powershell newline

下面是我从文本文件中获取服务器名称并以逗号串联的代码。 但是,当我打印该值时,它会在这些值之后附加一个新行。

我尝试做$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---

请让我知道这里出了什么问题。

2 个答案:

答案 0 :(得分:1)

据我所知,您正在尝试逗号分隔服务器。我自己跳过了Foreach构造,而只使用join运算符。

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

这也可以在单个语句中完成。

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

汤米

答案 1 :(得分:1)

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

关于额外的空行问题:Gert Jan Kraaijeveld可能暗示您的输入文件末尾有一个额外的空行,同时指出实际上 not 用您发布的代码应该可以正常工作(尽管效率低下)。

也许额外的一行是您如何打印结果值的人工产物。


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

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

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

@(Get-Content D:\ServerName.txt)将输入行作为字符串数组 [1] 返回,然后从其中
-ne ''删除空行,其结果为{ {1}}与分隔符-join

连接
如果输入文件碰巧仅包含 1 行,则

[1] ,将返回 scalar (单个字符串),因为PowerShell通常在收集管道输出 时报告一个单个输出对象本身而不是一个单个元素数组
因此,在上述命令中,需要Get-Content D:\ServerName.txt而不是@(...)的array-subexpression运算符:它确保(...)的输出被视为数组,因为Get-Command运算符在标量 LHS上的行为不同,并且返回 Boolean 而不是过滤LHS的元素:比较{{1} }到-ne
相比之下,如果将结果(直接)传递给'foo' -ne ''(这只是一个 no-op ,标量LHS):
@('foo') -ne ''