これは、PowerShellバージョン4.0以降で機能します。ただし、PowerShellバージョン2.0では、Add-Type
は不可能です(タイプは存在しません)。
function unzip {
Add-Type -Assembly “system.io.compression.filesystem”
[io.compression.zipfile]::ExtractToDirectory("SOURCEPATH\ZIPNAME", "DESTINATIONPATH")
}
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/
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
_オブジェクトが自動的に破棄され、未完了のコピー操作が中止されるため、何らかの遅延を追加する必要があります。