下面是我从文本文件中获取服务器名称并以逗号串联的代码。 但是,当我打印该值时,它会在这些值之后附加一个新行。
我尝试做$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---
请让我知道这里出了什么问题。
答案 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] ,
将返回 scalar (单个字符串),因为PowerShell通常在收集管道输出 时报告一个单个输出对象本身而不是一个单个元素数组。
因此,在上述命令中,需要Get-Content D:\ServerName.txt
而不是@(...)
的array-subexpression运算符:它确保(...)
的输出被视为数组,因为Get-Command
运算符在标量 LHS上的行为不同,并且返回 Boolean 而不是过滤LHS的元素:比较{{1} }到-ne
。
相比之下,如果将结果(直接)传递给'foo' -ne ''
(这只是一个 no-op ,标量LHS):
@('foo') -ne ''