Невозможно сжать файл с помощью Powershell 2.0 - PullRequest
1 голос
/ 27 июня 2019

Q1. Я пробовал несколько сжатых методов, но ни один из них не работает на моей машине. Я просто могу использовать внешний zip-инструмент 7z.exe для сжатия файла, но у меня нет привилегии устанавливать файл 7z.exe на сервере A и обновлять powershell до v5. в настоящее время использует powershell v2 Пробовал, как показано ниже, но ничего из этого не работает. Итак, любой другой метод может ввести меня для сжатого файла?

  • Add-Type -assembly "system.io.compression.filesystem"
  • Компресс-архив
  • Add-Type -Path C: \ Reference \ Draftdoc.docx
  • C: \ Reference \ Images \ figure2.vsd -CompressionLevel Optimal
    Путь назначения C: \ Archives \ Draft.Zip

Q2. Ниже приведен запрос, который я использую инструменты 7z.exe (этот serverB поставляется с 7z.exe), но я столкнулся с ошибкой. Я хочу сжать любой файл с сегодняшней датой.

$timestamp = (Get-Date).ToString('yyyy-MM')
$source = "D:\csv\*.csv", "D:\csv2\*.csv"
$target = "D:\CSV2_$timestamp.zip"
$7zip = "D:\Program Files\7-Zip\7z.exe"

#Compressed file
if (-not (test-path $7zip)) {throw '$7zip needed'} 
set-alias sz $7zip  

sz a -mx=9 $target $source
{
    Get-ChildItem $source | Where{$_.LastWriteTime -gt (Get-Date).AddDays(-1)}
}

Примечание: оба сервера мне также нужны сжатые файлы, но ServerA не поставляется 7z, но сервер B поставляется с 7z.exe

Ответы [ 3 ]

1 голос
/ 27 июня 2019

Вам придется использовать более старый Shell.Application метод COM-объекта .

function Extract-Zip
{
    param([string]$zipfilename, [string] $destination)

    if(test-path($zipfilename))
    {   
        $shellApplication = new-object -com shell.application
        $zipPackage = $shellApplication.NameSpace($zipfilename)
        $destinationFolder = $shellApplication.NameSpace($destination)
        $destinationFolder.CopyHere($zipPackage.Items())
    }
}

Обратите внимание, что я думаю, что это работает только в Windows Vista или Server 2008 или более поздней версии. Если вы используете Server 2003 - а вам не следует - то вам придется использовать стороннее программное обеспечение, насколько я знаю.

Само собой разумеется, но вам крайне необходимо обновить ваши серверы. Я не говорю, что вам нужно установить самый последний PowerShell. Я говорю, что вы, очевидно, используете Server 2008 R2 или более раннюю версию, а это 2019.

1 голос
/ 27 июня 2019

Это должно работать:

Add-Type -Assembly "System.IO.Compression.FileSystem"
[System.IO.Compression.ZipFile]::CreateFromDirectory($sourcePath, $destinationZip)

См. Add-Type: Невозможно добавить тип.Сборка 'System.IO.Compression.FileSystem' не найдена для альтернативных способов загрузки требуемой сборки

0 голосов
/ 27 июня 2019

Согласно вашему второму вопросу, где 7z установлен на ServerB, эта функция архивирует нужные вам файлы, этот код не зависит от имеющейся у вас версии PowerShell.

function Compress-Items ($ItemsPaths, $dest) {
    $Path = "D:\Program Files\7-Zip\7z.exe"
    $argList = "a -tzip -y `"$dest`""
    foreach ($item in $ItemsPaths) {
        $argList += " `"$item`""
    }

    Start-Process -FilePath $Path -ArgumentList $argList
}

$source = (get-childitem -Path "D:\csv", "D:\csv2" -Include "*.csv" -Recurse).FullName
Compress-Items -ItemsPaths $source -dest $destination

Примечание

Я изменил ваш $source, потому что это правильный способ получить все нужные вам CSV-файлы.

...