Как зашифровать только файлы, а не полную иерархию путей с помощью 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()