Как зашифровать только файлы, а не полную иерархию путей с помощью DotNetZip в powershell?

Я пытаюсь закрепить журнал, используя DotNetZip и powershell. Файлы находятся в папке C:\user\temp\logs. Когда я просматриваю журналы в каталоге и добавляю их в zip файл, я получаю иерархию папок и файлы журнала, когда мне нужны файлы журнала.

Таким образом, zip заканчивается, содержащий:

-user
  └temp  
    └logs
       └log1.log
        log2.log
        log3.log

Когда я хочу, чтобы zip файл содержал:

log1.log
log2.log
log3.log

Вот script, с которым я тестирую:

[System.Reflection.Assembly]::LoadFrom("c:\\\User\\bin\\Ionic.Zip.dll");
$zipfile = new-object Ionic.Zip.ZipFile("C:\user\temp\logs\TestZIP.zip");

$directory = "C:\user\temp\logs\"
$children = get-childitem -path $directory
foreach ($o in $children)
{
   if($o.Name.EndsWith(".log")){
      $e = $zipfile.AddFile($o.FullName)
   }
}
$zipfile.Save()
$zipfile.Dispose()

Ответы

Ответ 1

Существует AddFile, где вы можете переопределить имя файла в архиве:

public ZipEntry AddFile(
    string fileName,
    string directoryPathInArchive
)

имя_файла (строка)

Имя добавляемого файла. Имя файла может быть относительным путь или полностью определенный путь.

directoryPathInArchive ( Строка)

Указывает путь к каталогу, который будет использоваться для переопределения любого пути в имени файла. Этот путь может или не может соответствовать к реальному каталогу в текущем файловая система. Если файлы в пределах zip затем извлекаются, это путь, используемый для извлеченного файла. Передача null (ничего в VB) будет использовать путь к файлуName, если таковой имеется. Передача пустой строки ("") будет вставить элемент в корневой путь в архиве.

Попробуйте следующее:

 $e = $zipfile.AddFile($o.FullName, $o.Name)

Также возможно, что это делает то, что вы хотите:

 $e = $zipfile.AddFile($o.FullName, "")

Ответ 2

Не проверено, но я думаю, что это должно сработать.

[System.Reflection.Assembly]::LoadFrom("c:\\\User\\bin\\Ionic.Zip.dll");
$zipfile = new-object Ionic.Zip.ZipFile("C:\user\temp\logs\TestZIP.zip");

    $directory = "C:\user\temp\logs\"
    set-location $directory
    $children = get-childitem *.log
    foreach ($o in $children)
    {
        $e = $zipfile.AddFile($o.Name)
       }
    }
    $zipfile.Save()
    $zipfile.Dispose()