web-dev-qa-db-ja.com

Powershellバージョン2.0でZipファイルを解凍する方法は?

これは、PowerShellバージョン4.0以降で機能します。ただし、PowerShellバージョン2.0では、Add-Typeは不可能です(タイプは存在しません)。

function unzip {
    Add-Type -Assembly “system.io.compression.filesystem”

    [io.compression.zipfile]::ExtractToDirectory("SOURCEPATH\ZIPNAME", "DESTINATIONPATH")
}
7
Raphael
function Expand-ZIPFile($file, $destination)
{
$Shell = new-object -com Shell.application
$Zip = $Shell.NameSpace($file)
foreach($item in $Zip.items())
{
$Shell.Namespace($destination).copyhere($item)
}
}

これは、Shell.Applicationオブジェクトを介して、Windowsに組み込まれているZipファイルのサポートを活用します。これを使用するには、以下を実行します。

>Expand-ZipFile .\Myzip.Zip -destination c:\temp\files

ソース: http://www.howtogeek.com/tips/how-to-extract-Zip-files-using-powershell/

10
FoxDeploy

PowerShellバージョンは単なる症状です。それは問題の実際の原因ではありません。 Zipアーカイブを処理するための関連クラスは_System.IO.Compression_名前空間に 。NET Framework 4.5 (PowerShell v4の前提条件)で追加され、 以前のバージョン では使用できません。 。 .NET Frameworkのバージョン4.5をインストールすると、PowerShell v2でも_IO.Compression.ZipFile_クラスを使用できるようになります。

ただし、PowerShellv2では

_Add-Type -Assembly "System.IO.Compression.Filesystem"
_

.NET Framework 4.5をインストールしてもアセンブリが見つからないというエラーがスローされるため、次の行を置き換える必要があります。

_[Reflection.Assembly]::LoadWithPartialName("System.IO.Compression.Filesystem")
_

.Net Frameworkの構成を 常に最新のCLRを使用 に変更します(そうでない場合、PowerShellv2は4.5ではなく.NetFramework 2.0を使用します):

_reg add HKLM\SOFTWARE\Microsoft\.NETFramework /v OnlyUseLatestCLR /t REG_DWORD /d 1
_

@ FoxDeploy で提案されているように、.NET Framework 4.5がなくてもすぐに機能する代替手段は_Shell.Application_ COMオブジェクトです。ただし、CopyHere()メソッドは非同期で実行されることに注意してください。つまり、実際のコピー操作が完了するのを待たずにすぐに戻ります。スクリプトから実行する場合は、スクリプトの終了時に_Shell.Application_オブジェクトが自動的に破棄され、未完了のコピー操作が中止されるため、何らかの遅延を追加する必要があります。

9
Ansgar Wiechers