当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] PowerShell 压缩包 | ZIP 功能在 PowerShell 中如何工作?

作者:精品下载站 日期:2024-12-14 04:47:52 浏览:14 分类:玩电脑

PowerShell 压缩包 | ZIP 功能在 PowerShell 中如何工作?


[玩转系统] PowerShell 压缩包 | ZIP 功能在 PowerShell 中如何工作?

PowerShell ZIP 的定义

PowerShell ZIP 模块允许压缩本地计算机或远程计算机上的文件和文件夹,而无需安装任何第三方或内置软件,并且 zip 模块 (Microsoft.PowerShell.ZIP) 附带两个 cmdlet Compress-Archive 和 Expand-Archive其中,Compress-Archive cmdlet 用于压缩文件和文件夹,.Net Framework 的 System.IO.Compression 类用于压缩 Windows 系统上的数据。

语法:

Compress-Archive Syntax:

语法1:

Compress-Archive
[-Path] <String[]>
[-DestinationPath] <String>
[-CompressionLevel <String>]
[-PassThru]
[-WhatIf]
[-Confirm]
[<CommonParameters>]

语法2:

Compress-Archive
[-Path] <String[]>
[-DestinationPath] <String>
[-CompressionLevel <String>]
-Update
[-PassThru]
[-WhatIf]
[-Confirm]
[<CommonParameters>]

语法3:

Compress-Archive
[-Path] <String[]>
[-DestinationPath] <String>
[-CompressionLevel <String>]
-Force
[-PassThru]
[-WhatIf]
[-Confirm]
[<CommonParameters>]

语法4:

Compress-Archive
-LiteralPath <String[]>
[-DestinationPath] <String>
[-CompressionLevel <String>]
-Update
[-PassThru]
[-WhatIf]
[-Confirm]
[<CommonParameters>]

语法5:

Compress-Archive
-LiteralPath <String[]>
[-DestinationPath] <String>
[-CompressionLevel <String>]
-Force
[-PassThru]
[-WhatIf]
[-Confirm]
[<CommonParameters>]

语法 6:

Compress-Archive
-LiteralPath <String[]>
[-DestinationPath] <String>
[-CompressionLevel <String>]
[-PassThru]
[-WhatIf]
[-Confirm]
[<CommonParameters>]

在给定的语法集中,我们一次只能使用一种语法组合。例如,Syntax4 和 Syntax5 的组合不能一起使用,即我们不能一起使用 -Force 和 -Update 参数。

System.IO.压缩语法:

ZipFile.CreateFromDirectory:此类方法从目录创建 Zip 存档。
ZipArchive.CreateEntry:此类方法将新文件添加到现有 Zip 存档。

ZIP 功能在 PowerShell 中如何工作?

压缩文件和文件夹的简单方法是使用 Compress-Archive cmdlet。此 cmdlet 是在 PS 版本 5 的 PowerShell 模块 Microsoft.PowerShell.Archive 中引入的。它使用源路径和目标来压缩数据,并且还使用不同的压缩级别。
压缩级别指定我们要压缩的程度。申请创建 ZIP 文件。压缩级别越快,文件压缩速度越快,但文件大小也越大。压缩分为三种类型。

一个。最快:使用最快的压缩方法来压缩文件,可以减少处理时间,但文件大小会更大。

b. NoCompression:不应用任何压缩方法,也不压缩源文件。目标存档文件将大于最佳压缩。

c.最佳:这是此命令的中等级别和默认值。处理时间取决于文件的大小。

当我们使用.NET压缩API System.IO.Compression.ZipArchive时,它支持以下重载构造函数来创建Zip文件。

一个。 CreateFromDirectory(String, String):创建包含指定目录中的文件和文件夹的 Zip 存档。

b. CreateFromDirectory(String, String, CompressionLevel, Boolean):它创建一个 ZIP 存档,其中包含指定目录中的文件和文件夹,使用压缩级别,还可以选择包含基目录。

c. CreateFromDirectory(String, String, CompressionLevel, Boolean, Encoding):它创建一个 zip 存档,其中包含指定目录中的文件和文件夹,使用压缩级别,可以选择包含基目录,并使用条目名称的字符编码。

当我们看到示例时,我们会对上述方法有更多的了解。

示例

让我们讨论 PowerShell ZIP 的示例。

示例#1:使用 Compress-Archive 创建存档文件。

在此示例中,我们使用默认压缩级别(尽管已指定)在目标位置“C:\Archived Data”归档两个文件,并创建一个目标文件名 Compressed.Zip。

Compress-Archive -Path C:\Tempvms.csv, C:\Temp\ADUserData.csv `
-DestinationPath 'C:\Archived Data\Compressed.zip' `
-CompressionLevel Optimal -Force -Verbose

输出:

[玩转系统] PowerShell 压缩包 | ZIP 功能在 PowerShell 中如何工作?

示例#2:使用 Splatting 压缩存档。

我们还可以将第一个示例与 splatting 结合使用,它将需要的输入收集到单个哈希表中并将其传递给命令,如下所示。

$data = @{
Path = 'C:\Tempvms.csv','C:\Temp\ADUserData.csv'
DestinationPath = 'C:\Archived Data\Compressed.zip'
CompressionLevel = 'Optimal'
Force = $true
Verbose = $true
}
Compress-Archive @data

上述命令与示例 1 类似。

示例#3:压缩存档以创建源文件夹存档。

要压缩特定文件夹,我们需要使用通配符 (*),以便整个文件夹和文件将被存档,如下所示。我们将在这里使用最快的压缩级别。

$data = @{
Path = 'C:\Temp\*'
DestinationPath = 'C:\Archived Data\temparchive.zip'
CompressionLevel = 'Fastest'
Force = $true
Verbose = $true
}
Compress-Archive @data

我们还可以使用通配符 (*) 来表示以特定单词开头的特定文件名。例如,我们可以使用 C:\temp\ts*,这样它将提取以 TS 和 C:\temp\*.csv 开头的所有文件,从而仅压缩 C:\temp 文件夹中的 CSV 文件。

示例 #4:使用 No Compression 级别的压缩存档。

当我们使用 No Compression 级别创建存档时,其压缩率将为 0,并导致目标文件夹大小增加。例如,

$data = @{
Path = 'C:\Temp\*.csv'
DestinationPath = 'C:\Archived Data\CSVarchive1.zip'
CompressionLevel = 'NoCompression'
Force = $true
Verbose = $true
}
Compress-Archive @data

当我们检查压缩比时,它将为 0。请参阅下面的输出。

[玩转系统] PowerShell 压缩包 | ZIP 功能在 PowerShell 中如何工作?

示例#5:更新现有文件。

以下命令将从 C:\temp 添加新文件和文件夹,并将 C:\Test1\7z1900-x64.msi 添加到现有存档 temparchive.zip。

$data = @{
Path = 'C:\Temp\*', 'C:\Test1z1900-x64.msi'
DestinationPath = 'C:\Archived Data\temparchive.zip'
Update = $true
Verbose = $true
}
Compress-Archive @Data

示例#6:使用.Net 命名空间方法。

使用 System.IO.Compression.ZipFile 类和 CreateFromDirectory 方法,我们可以创建压缩文件,如下所示。它将 C:\temp 的存档创建到目标路径“C:\Archived Data\DotNetCompression.Zip”。

[System.IO.Compression.ZipFile]::CreateFromDirectory('C:\temp\', 'C:\Archived data\Dotnetcompression.zip')

我们还可以从其语法 CreateFromDirectory(String, String, CompressionLevel, Boolean) 添加 CompressionLevel。

Add-Type -AssemblyName System.IO.Compression.FileSystem
$CompressionLevel = [System.IO.Compression.CompressionLevel]::Fastest
[System.IO.Compression.ZipFile]::CreateFromDirectory('C:\temp','C:\Archived Data\Dotnetcompression.zip',$CompressionLevel,$true)

在上面的示例中,我们使用压缩级别更快,并且 $true 最后一个参数提到了 includeBaseDirectory 属性,其中提到 $true 表示包含来自存档根目录的源目录的目录名称,$false 表示仅包含目录的内容。

结论

PowerShell提供了一种无需使用任何软件即可压缩数据的好方法,我们只需要PowerShell模块。当我们无法在受限系统中安装 ZIP 软件时,这对我们有很大帮助。还有像 7ZIP 这样的第三方软件,它提供了用于 ZIP 和解压缩文件的 PowerShell 模块。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯