在Server 2012 Core中使用Powershell解压缩文件


15

我需要使用powershell解压缩文件。我见过每个人的典型方法是使用脚本自动执行shell。

$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文件。

如何在Server 2012 Core中完全编写脚本来解压缩zip文件?


从SF下载7zip有什么要求?为什么不能从内部来源安装/复制?
longneck 2012年

@longneck我正在制作的PS脚本将分发给客户。因此脚本必须完全独立。我可以自己托管一个zip实用程序,但这是我不希望再遇到的麻烦(合法)。我只是希望有一个简单的Cmdlet可以做到这一点,并在2012
推出。– vcsjones

如果您要向客户分发东西,为什么不建立一个自解压档案?
Zoredache

@Zoredache嗯,起初似乎需要更多工作(我们的构建系统已经在构建ZIP),我希望它会“真正快速”。
vcsjones 2012年

Answers:


24

Server 2012附带了具有System.IO.Compression.ZipFile的 Dot.NET 4.5,该文件具有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),那么您最终将具有本机cmdlet:

Expand-Archive $pathToZip $targetDir

我只是通过System.IO.Compression和ZipFile进行查看。是否有4.5的更新将其添加?
Mike

似乎这是在4.5中引入的,但在4.0中却没有。如果您有4.5,则应该拥有它。
彼得·汉道夫

6
这是一个该死的解决方案,这是该死的时间。
MDMarra 2012年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.