Назад | Перейти на главную страницу

Распаковать файл с помощью Powershell в Server 2012 Core

Мне нужно разархивировать файл с помощью PowerShell. Я видел, как все делают это обычно путем автоматизации оболочки с помощью сценария.

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

У меня это не сработает, поскольку в Server Core нет оболочки, поэтому нет ее, которую нужно автоматизировать. Это дает ошибку E_FAIL COM.

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

Как я могу полностью распаковать zip-файл с помощью сценария в Server 2012 Core?

Server 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