Сам никогда не пробовал, но есть Compress-Archive
:
Командлет Compress-Archive создает архивированный (или сжатый) архивный файл из одного или нескольких указанных файловили папки.Архивный файл позволяет упаковывать и, по желанию, сжимать несколько файлов в один заархивированный файл для облегчения распространения и хранения.Архивный файл может быть сжат с использованием алгоритма сжатия, указанного параметром CompressionLevel.
Поскольку Compress-Archive использует Microsoft .NET Framework API System.IO.Compression.ZipArchive для сжатия файлов, максимальный размер файлачто вы можете сжать с помощью Compress-Archive в настоящее время 2 ГБ.Это ограничение базового API.
Вот пример сценария, который я только что взломал вместе:
# configure as needed
$source = "c:\temp"
$target = "d:\temp\test"
# grab source file names and list them
$files = gci $source -recurse
$files
# target exists?
if( -not (test-path $target)) {
new-item $target -type directory
}
# compress, I am using -force here to overwrite existing files
$files | foreach{
$dest = "$target\" + $_.name + ".zip"
compress-archive $_ $dest -CompressionLevel Optimal -force
}
# list target dir contents
gci $target -recurse
Возможно, вам придется немного его улучшить, когда дело доходит до подпапок.В вышеприведенной версии подпапки сжимаются целиком в один файл.Это может быть не совсем то, что вы хотите.