Скорее всего, это не пробелы, а нулевые символы, потому что строки - это Unicode в памяти, которые для символов ASCII состоят из первого байта, содержащего символ, и второго байта 0x00.
В Windows, это может быть комбинацией многих вещей, включая то, что кодовая страница установлена для хоста консоли (например, conhost.exe), а также [Console]::OutputEncoding
для PowerShell и то, какую кодировку файл уже использовал. При вызове Set-Content
вы можете использовать Set-Content -Encoding Unicode "C:\User\temp.log"
, так как кажется, что ваша программа timestamp
фактически записывает символы Юникода в стандартный вывод, игнорируя то, для чего установлена ваша кодовая страница консоли.
Но это, вероятно, будет проще просто отформатируйте строку с отметкой времени прямо в файле, и будет использоваться вся кодировка по умолчанию, которую знает PowerShell.
function Log([string] $message) {
("{0:G} $message" -f [DateTime]::UtcNow) >> 'C:\User\temp.log'
}
Log 'Connecting to mailbox'
Если вы решите продолжать использовать timestamp
, либо посмотрите, можете ли вы контролировать это выходная кодировка (поскольку он не определяет его должным образом) или передача Unicode в Set-Encoding
или Add-Encoding
- последний для добавления содержимого.