Очень просто, используя DotNetZip .
[System.Reflection.Assembly]::LoadFrom("c:\\dev\dotnet\\Ionic.Zip.dll");
$directoryToZip = "c:\\temp";
$zipfile = new-object Ionic.Zip.ZipFile;
$zipfile.AddEntry("Readme.txt", "This is a zipfile created from within powershell.")
$zipfile.AddDirectory($directoryToZip, "home")
$zipfile.Save("ZipFiles.ps1.out.zip");
$zipfile.Dispose();
Объект ZipFile выполняет рекурсию за вас, как часть метода ZipFile.AddDirectory () .
DotNetZip - бесплатная библиотека.
Один дополнительный комментарий - у меня была причина делать FTP-загрузки в прошлом, как часть выпуска программного обеспечения.Я обнаружил, что при последующих загрузках большинство файлов не изменилось.Поэтому я ввел файл «оглавления», в котором хэш MD5 каждого файла сопоставлялся с его именем.Перед загрузкой я загружал оглавление, а затем сравнивал каждый MD5 в таблице с MD5 файла на диске.Если они совпадают, то нет необходимости загружать этот конкретный файл.Это сэкономило много времени и передачу данных.
Хотя у меня нет сценария powershell для этого.<</p>