Мне нужно разархивировать файл с помощью 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