Powershell опускает CRLF при записи в файл
Код воспроизведения ниже
$part1 = "this is one line
This is a second line
this is not
"
$part2 = "this is almost the last line
this is the last line."
$code = $part1
$code += $part2
$code
$code | out-file "test.cs"
notepad test.cs
Когда я просматриваю вывод в Блокноте, а не в командной строке, разрывы строк CRLF отсутствуют.





Проблема здесь в том, что нажатие Enter на консоли не дает CRLF в середине строки, а только LF. Вам нужно либо добавить символы CRLF (`r`n) в свои строки, либо создать их по-другому. Приведенный ниже метод просто заменяет последовательности LF или CRLF на CRLF. Я использую оператор -join для объединения строк.
$part1 = "this is one line
This is a second line
this is not
"
$part2 = "this is almost the last line
this is the last line."
$code = -join ($part1 -replace "\r?\n","`r`n"),($part2 -replace "\r?\n","`r`n")
$code | out-file "test.cs"
notepad test.cs
Вы можете построить свои переменные в виде массива строк. Тогда при доступе к объектам через конвейер CRLF будет автоматически добавляться к каждому элементу на выходе.
$part1 = "this is one line","This is a second line","this is not"
$part2 = "this is almost the last line","this is the last line."
$code = $part1 + $part2
$code | out-file test.cs
Вы также можете использовать оператор -split для разделения символов LF или CRLF. Имейте в виду, что $part1 + $part2 работает только потому, что у вас есть LF в конце $part1.
$part1 = "this is one line
This is a second line
this is not
"
$part2 = "this is almost the last line
this is the last line."
$code = ($part1 + $part2) -split "\r?\n"
$code | out-file test.cs