Старый текст
В общем, вот как правильно получить размер файла, а не длину строки в символах, которую я получал.
Это я добавил позже, когда я разобрался в чём дело
В Visual Studio Code уже определена переменная $file в конфигурации из-за чего у меня неправильно отображался вывод. Не размер файла в байтах, а длина строки. Подробнее в комментариях к этому сообщению.
Опять старый, но правильный текст
Берём просто класс из .NET
System.IO.File и вызываем у него метод
ReadAllBytes, далее мы имеем массив байт, у которого есть свойство Length, собственно, это свойство возвращает кол-во элементов в массиве, так как один элемент это значение типа System.Byte, то значит мы получаем кол-во байт. Если знаешь C#, то PowerShell будет в разы проще понять и использовать.
Кстати, оговорюсь. Этот пример явно не самый гениальный вариант, ибо читать в память файл для получения его размера... Как прмер сойдёт.
#Clear-Host
$pathToFile = Get-Item C:\Windows\explorer.exe
$bytes = [System.IO.File]::ReadAllBytes($pathToFile)
"Размер файла $pathToFile составляет $($bytes.Length) байт"
"Размер: {0:n3} мегабайт" -f $($bytes.Length / 1mb)
Вариант 2. Создаём экземпляр класса
System.IO.FileInfo и читаем значение свойства
Length$pathToFile = Get-Item C:\Windows\explorer.exe
$fileInfo = [System.IO.FileInfo]::new($pathToFile);
"Размер файла $pathToFile составляет $($fileInfo.Length) байт"
"Размер: {0:n3} мегабайт" -f $($fileInfo.Length / 1mb)