$str_msg = $file,[System.IO.File]::ReadAllText($file.FullName)
не создает строку , он создает 2-элементный массив ([object[]]
), состоящий из $file
[System.IO.FileInfo]
экземпляр и строка с содержимым этого файла.
Предположительно, метод .AddMsg()
ожидает одну строку, поэтому PowerShell преобразует в массив массив, чтобы преобразовать его в одну строку; PowerShell переводит массив в массив , объединяя элементы с одним пробелом в качестве разделителя по умолчанию; например.:
[string] (1, 2)
урожайность '1 2'
.
Поэтому лучше всего составить $str_msg
в виде строки для начала с явным переводом строки в качестве разделителя , например ::101035*
$strMsg = "$file`r`n$([System.IO.File]::ReadAllText($file.FullName))"
Обратите внимание на использование escape-последовательности "`r`n"
для создания CRLF, специфичной для Windows последовательности новой строки; на Unix-подобных платформах вы бы использовали "`n"
(LF).
.NET предлагает кроссплатформенную абстракцию, [Environment]::NewLine
, которая возвращает подходящую для платформы последовательность новой строки (которую вы можете альтернативно встроить как $([Environment]::NewLine)
в "..."
).
Альтернативой интерполяции строки является использование -f
, оператора форматирования строки, основанного на методе .NET String.Format()
:
$strMsg = '{0}{1}{2}' -f $file,
[Environment]::NewLine,
[System.IO.File]::ReadAllText($file.FullName)