Server 2012 CoreのPowershellでファイルを解凍します


15

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ファイルを完全に解凍するスクリプトを作成するにはどうすればよいですか?


SFから7zipをダウンロードする要件は何ですか?内部ソースからインストール/コピーできないのはなぜですか?
ロングネック

@longneck私が作成しているPSスクリプトは、顧客に配布される予定です。そのため、スクリプトは完全に自己完結型である必要があります。私は可能性が zipユーティリティ自分自身をホストするが、それは私が望んでいない別の頭痛(法律用語)です。これを実行できるシンプルなコマンドレットが2012
導入されたことを望ん

顧客に何かを配っているなら、なぜ自己解凍アーカイブを構築しませんか?
ゾレダチェ

@Zoredacheまあ、それは最初はより多くの作業のように見えました(私たちのビルドシステムはすでにZIPをビルドしています)。
vcsjones

回答:


24

Server 2012には、ExtractToDirectoryメソッドを持つSystem.IO.Compression.ZipFileを持つ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

System.IO.Compressionを調べたところ、ZipFileはありません。4.5を追加する更新プログラムはありますか?
マイク

これは4.5で導入されたようですが、4.0にはありません。4.5があれば、それが必要です。
ピーターハーンドルフ

6
このためのネイティブなソリューションが存在するのは、まさにその時です。
MDマーラ

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.