簡體   English   中英

如何使用 Powershell 2.0 版解壓縮 Zip 文件?

[英]How to unzip a Zip File with Powershell Version 2.0?

這適用於 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 存檔的相關類已添加到.NET Framework 4.5 (PowerShell v4 的先決條件)的System.IO.Compression命名空間中,並且在早期版本中不可用。 安裝 .NET Framework 4.5 版,您還可以在 PowerShell v2 中使用IO.Compression.ZipFile類。

但是,在 PowerShell v2 中

Add-Type -Assembly "System.IO.Compression.Filesystem"

即使您安裝了 .NET Framework 4.5,也會拋出一個找不到程序集的錯誤,因此您需要將該行替換為

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

並將 .Net Framework 配置更改為始終使用最新的 CLR (否則 PowerShell v2 將使用 .Net Framework 2.0 而不是 4.5):

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

正如@FoxDeploy所建議的那樣,即使沒有 .NET Framework 4.5 也可以開箱即用的替代方法是Shell.Application COM 對象。 但是請注意, CopyHere()方法是異步運行的,即它會立即返回而不等待實際的復制操作完成。 如果您想從腳本運行它,您需要添加某種延遲,因為Shell.Application對象會在腳本終止時自動銷毀,從而中止未完成的復制操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM