Как уже отмечали другие, в общем случае гораздо проще использовать оператор -join
для объединения строк ввода с указанным разделителем.
Что касается проблемы дополнительной пустой строки: GertЯн Краайевелд правдоподобно полагает, что ваш входной файл имеет дополнительную пустую строку в конце, отмечая, что это на самом деле не , что произойдет с кодом, который вы разместили, который должен работатьштраф (несмотря на свою неэффективность).
Возможно, дополнительная строка является артефактом того, как вы печатаете полученное значение.
Ответитьсвязанный с этим вопрос как игнорировать пустые строки во входном файле :
Предполагая, что можно просто удалить все пустые строки из ввода, самый простой 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 и возвращает Boolean вместо фильтрации элементов LHS: сравните 'foo' -ne ''
с @('foo') -ne ''
.
Напротив, @(...)
является , а не необходимым, если вы передаете результат (напрямую) -join
(который просто является no-op со скалярной LHS):
(Get-Content D:\ServerName.txt) -join ','