Розпакуйте файл з Powershell в серверній ядрі 2012 року


15

Мені потрібно розпакувати файл із shellhell. Типовий спосіб, коли я бачив усіх, що це роблять, - це автоматизація оболонки зі сценарієм.

$shellApplication = new-object -com shell.application
$zipPackage = $shellApplication.NameSpace($zipfilename)
$destinationFolder = $shellApplication.NameSpace($destination)
$destinationFolder.CopyHere($zipPackage.Items())

Це не спрацює для мене, оскільки сердечний ядро ​​не має оболонки, тому автоматизувати його немає. Це дає помилку COM E_FAIL COM.

Powershell, здається, не зможе зробити це самостійно, і якщо я перейду на третю сторону, мені доведеться в першу чергу розібратися з способом скрипту, як отримати утиліту на сервер. 7-Zip був моїм переходом, але, схоже, я не можу сценарій завантаження та встановлення. Sourceforge продовжує плювати мені назад HTML-файли.

Як я можу повністю розпакувати скрипт в zip-сервері Server 2012 повністю?


Що з вимогою завантажити 7zip з SF? Чи не можете ви встановити / скопіювати з внутрішнього джерела?
longneck

@longneck Сценарій PS, який я створюю, роздаватиметься клієнтам; тому сценарій повинен бути повністю автономним. Я міг би влаштувати собі утиліту zip, але це ще одна головна біль, яку я не хочу (легальний). Я просто сподівався, що з'явиться простий Cmdlet, який міг би зробити це, що було
введено

Якщо ви щось роздаєте клієнтам, чому б не створити саморозпаковуваний архів?
Зоредаче

@Zoredache Добре, що спочатку здавалося, що це більше роботи (наша система збирання вже створює ZIP-файли), я сподівався, що це буде просто "реально швидко".
vcsjones

Відповіді:


24

Сервер 2012 постачається з Dot.NET 4.5, який має System.IO.Compression.ZipFile, який має метод ExtractToDirectory. Ви повинні мати можливість використовувати це від PowerShell.

Ось приклад.

Спочатку потрібно завантажити збірку ZipFile в:

[System.Reflection.Assembly]::LoadWithPartialName("System.IO.Compression.FileSystem") | Out-Null

Потім витягніть вміст

[System.IO.Compression.ZipFile]::ExtractToDirectory($pathToZip, $targetDir)

Редагувати: Якщо ви оновили PowerShell 5 (Windows Management Framework 5.0), ви, нарешті, маєте власні командлети:

Expand-Archive $pathToZip $targetDir

Я щойно переглянув System.IO.Compression і ZipFile там немає. Чи є оновлення до 4.5, яке додає його?
Майк

Здається, це було введено в 4,5, але немає в 4.0. Якщо у вас 4,5, ви повинні мати його.
Пітер Гандорф

6
Проклятий час, що для цього є власне рішення.
MDMarra

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.