web-dev-qa-db-ja.com

Server 2012 CoreでPowershellを使用してファイルを解凍する

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ファイルを吐き出し続けます。

Server 2012 CoreでZipファイルを完全にスクリプトで解凍するにはどうすればよいですか?

15
vcsjones

Server 2012には、 System.IO.Compression.ZipFile があり、ExtractToDirectoryメソッドがあるDot.NET 4.5が付属しています。これは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
25
Peter Hahndorf