Powershell - 压缩存档消耗所有内存

Powershell - 压缩存档消耗所有内存

我对 powershell 和脚本还不熟悉。

我正在尝试使用 compress-archive cmdlet 压缩 IIS 日志文件(总共 60GB),但是每次我都会收到错误:

“引发了‘System.OutOfMemoryException’类型的异常。”

我已经将 MaxMemoryPerShellMB 调整为 2048MB 并重新启动了 WinRM 服务。

执行命令时,RAM 内存消耗超过 6GB。

我使用的代码如下:

$exclude = Get-ChildItem -Path . | Sort-Object -Descending | Select-Object -First 1
$ArchiveContents = Get-ChildItem -Path . -Exclude $exclude | Sort-Object -Descending
Compress-Archive -Path $ArchiveContents -DestinationPath .\W3SVC2.zip -Force

Powershell 版本是 5。有人可以指导我吗?

提前致谢。

答案1

正如 Daniel 所说,使用 .NET 类。您可以这样做:

# File or directory to zip
$sourcePath = "C:\Path\To\File"
# Resulting .zip file
$destinationPath = "C:\Path\To\File.zip"
# Compression level. Optimal means smallest size, even if it takes a little longer to compress
$compressionLevel = [System.IO.Compression.CompressionLevel]::Optimal
# Whether or not to include root directory (if zipping a directory) in the archive
$includeBaseDirectory = $false
Add-Type -AssemblyName System.IO.Compression.FileSystem
[System.IO.Compression.ZipFile]::CreateFromDirectory("$sourcePath","$destinationPath",$compressionLevel,$includeBaseDirectory)

这将创建目录的 zip 文件,并且几乎不占用任何 RAM。我尝试使用这两种方法压缩同一个(25 GB 大)目录。使用时,Compress-Archive我看到 RAM 使用量超过 6GB,然后我不得不终止主机进程,而使用上述方法时,powershell 主机进程的 RAM 使用量没有增加。

相关内容