Get-Content с аргументом -Tail занимает неопределенное время

733
Sabyasachi Mukherjee

Когда я выполняю Get-Content -ReadCount 0 -encoding String -literalpath "D:\file"файл, он выгружает шестнадцатеричное содержимое в течение минуты, но когда я выполняю Get-Content -ReadCount 0 -tail 1 -encoding String -literalpath "D:\file", Powershell не дает никакого вывода, даже через 30 минут. Вот ссылка на файл . Что мне не хватает?

1
Вот [другой файл] (https://1drv.ms/u/s!Aoy94YsQZODbhE3OBWyZUdRBwDOP), который страдает от той же проблемы. Sabyasachi Mukherjee 7 лет назад 0
@PIMP_JUICE_IT Я обошел это, добавив ключ `-encoding byte`. Ты был прав. Файлы, заканчивающиеся шестнадцатеричным значением \ x00, являются проблемой, так как хвоста практически нет. Sabyasachi Mukherjee 7 лет назад 0
Вы должны сделать все возможное, чтобы добавить ответ. Синтаксис сработал так: `Get-Content -ReadCount 0 -tail x -encoding Byte -literalpath" D: \ file "` где x - это количество байтов, которое вы хотите. `-encoding String` завершается ошибкой, поскольку хвоста нет. Sabyasachi Mukherjee 7 лет назад 0
Нет. Это проясняет проблему и предлагает решение по мере необходимости. Sabyasachi Mukherjee 7 лет назад 0

1 ответ на вопрос

1
Pimp Juice IT

Значение Get-Contentфайла PowerShell nulс -Encoding Byteпроблемой

После загрузки файла по ссылке, которую вы разместили, и открытия его с помощью Notepad ++, кажется, что последняя строка содержит длинный набор nulсимволов (см. Ниже).

enter image description here

С учетом того, что он находится в содержимом этого файла и в синтаксисе, который вы использовали с Get-Content of: Get-Content -ReadCount 0 -tail 1 -encoding String -literalpath "D:\file"для получения содержимого, кажется, что он использует запрос PowerShell при использовании -encoding String.

Как предлагается в этом посте в различных ответах Как удалить NULL char (0x00) из объекта в PowerShell, кажется, что шестнадцатеричное значение /x00и использование Get-Content с параметром -Encoding Stringдля набора символов, который должен быть идентифицирован как строка, не как эти шестнадцатеричные значения и сбивает с толку PowerShell.


Заключение и решение

Переключение синтаксиса Get-Content с использованием -Encoding Byteнабора символов, идентифицируемого как байты, по-видимому, решает эту проблему.

Get-Content -ReadCount 0 -tail x -encoding Byte -literalpath "D:\file" 

Синтаксис сработал так: Get-Content -ReadCount 0 -tail x -encoding Byte -literalpath "D:\file"где x - это количество байтов, которое вы хотите. -кодирование строки не выполняется, так как хвоста нет. - Сабясачи Мукерджи