串一个额外的新行未来

问题描述 投票:0回答:2

下面就是我从一个文本文件以服务器名称和与逗号串联的代码。但是,当我打印的价值,它与值后进行额外的新行来。

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

请让我知道是怎么回事错在这里。

powershell newline
2个回答
1
投票

最好的,我可以告诉你正在试图用逗号分隔的服务器。我会跳过foreach构造自己,简单地使用JOIN运算符。

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

这可以在一个单一的语句来完成,以及。

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

汤米


1
投票

正如其他人指出,这是一般更易于使用的-join运营商,可预定的分离器加入输入线。

作为一个额外的空行的问题:Gert Jan Kraaijeveld振振有词地认为,你的输入文件有在最后一个额外的空行,但同时指出,这其实并没有将与您发布的代码,它应该工作正常发生的事情(尽管它的低效率)。

也许是多余的就是你如何打印结果值的神器。


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

假设它是确定只需删除输入的所有空行,最简单的PowerShell的惯用的解决方案是:

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

@(Get-Content D:\ServerName.txt)返回输入线作为数组[1]串,从该 -ne ''然后删除空行,并且其与-join隔板,加入结果


[1]将Get-Content D:\ServerName.txt返回一个标量(单个字符串),如果输入文件碰巧只包含1条线,被收集管道输出时,因为一般的PowerShell报告的单个输出对象作为本身,而不是作为单个元素数组。 正因为如此,@(...),阵列-子表达式算子 - 而不是仅仅(...) - 需要在上述命令:它确保从Get-Command输出被处理为一个数组,因为-ne操作者用一个标量LHS作用不同,并返回一个布尔而不是过滤LHS的要素:比较'foo' -ne ''@('foo') -ne ''。 相反,如果你通过了结果@(...)是没有必要的(直接)到-join(这根本无操作与标LHS): (Get-Content D:\ServerName.txt) -join ','

© www.soinside.com 2019 - 2024. All rights reserved.