[英]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.