Как распаковывать большие архивы в DSC-конфигурациях Powershell

Как распаковывать большие архивы в DSC-конфигурациях Powershell

Если вам когда-нибудь надо было распаковать БОЛЬШИЕ архивы в Powershell DSC-конфигурациях (например, в процессе развертывания какого-нибудь ПО), вы вероятно сталкивались с проблемой, что распаковка с помощью ресурса Archive длится ОЧЕНЬ долго. И xArchive тоже не помогает - у него такие же проблемы.

Один из возможных вариантов для того, чтобы обойти ситуацию - это использовать 7zip или другую утилиту командной строки, используя ресурс DSC WindowsProcess, но учтите, что WindowsProcess только запустит ваш процесс распаковки, а потом сразу перейдет к следующей инструкции в конфигурации. Например вот:

 

WindowsProcess ExtractSolr {
    Path = "c:\distrib\7z\7za.exe";
    Arguments = "x c:\distrib\solr\solr-6.3.0.zip -oc:\ -y";
}

WindowsProcess ExtractJava {
    Path = "cmd.exe";
    Arguments = "/C c:\distrib\7z\7za.exe x c:\distrib\java\server-jre-8u112-windows-x64.tar.gz -so | c:\distrib\7z\7za.exe x -aoa -si -ttar -oc:\java";
}

В этом примере Java будет распакована РАНЬШЕ, чем Solr. И если у вас есть зависимести в порядке разархивирования пакетов, то вы неизбежно столкнетесь с ошибками при развертывании конфигурации.

Поэтому я попытался разобраться со своими архивами следующим образом:

Script ExtractSolr {
    SetScript = {        
        New-Item -Path "C:\solr-6.3.0" -ItemType Directory;
        Expand-Archive -Force -Path "c:\distrib\solr\solr-6.3.0.zip" -DestinationPath "C:\";
    }

    TestScript = {
        (Test-Path -Path "C:\solr-6.3.0");
    }

    GetScript = {
        #Do Nothing                
    }
}

Используя ресурс Script, любые последующие инструкции не будут выполняться, пока не закончит выполняться сам Script.

Метки: powershell (ru), dsc (ru)

ПечатьE-mail

Добавить комментарий


Защитный код
Обновить