Как уже упоминалось в комментариях, одним из способов обхода длинных имен файлов является сохранение относительных путей. 7Zip будет хранить относительные пути, если вы укажете входной файл с относительными путями, и они разрешат файлы, которые вы хотите заархивировать, как описано в этот ответ .
Промежуточные файлы могут быть грязными, поэтому я написал скрипт, который использует метод CreateEntryFromFile ZipFileExtensions для хранения относительного пути в zip-файле.
Вы можете указать -ParentFolder в командной строке для хранения путей относительно родительского, включая UNC-путь, если вы хотите архивировать файлы на другом компьютере. Если -ParentFolder не указан, он выберет папку скрипта в качестве родительского и сохранит пути относительно скрипта.
Скопируйте код в новый скрипт с именем ArchiveOldLogs.ps1 и запустите его с помощью следующей командной строки:
.\ArchiveOldLogs.ps1 -ParentFolder "D:\Testing\" -FileSpecs @("*.*") -Filter { $_.LastWriteTime -lt (Get-Date).AddDays(-60)} -DeleteAfterArchiving:$false
Это даст вам еще 11 символов в конце пути для хранения, чего должно быть достаточно, чтобы обойти разницу в 10 символов между Windows и Zip пределами длины пути. Попробуйте более глубокую папку, если вы все еще получаете ошибки. Файлы, которые не могут быть заархивированы или уже заархивированы, будут пропущены.
Удалите -DeleteAfterArchiving:$false
из командной строки, когда вам удобно, что она архивирует только то, что вы хотите.