我尝试使用Compress-Archive
压缩IIS日志文件(总共60GB),但是我收到错误:
"类型的异常' System.OutOfMemoryException'被扔了。"
$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
我已将MaxMemoryPerShellMB
调整为2048MB
并重新启动了WinRM服务。
执行命令时RAM内存消耗超过6GB。
答案 0 :(得分:2)
根据Matt的建议,我建议将其存档到文件集中。类似的东西:
For($i=0;$i -le $ArchiveContents.Count;$i=$i+10){
Compress-Archive -Path $ArchiveContents[$i..($i+9)] -DestinationPath .\W3SVC2-$i.zip -Force
}
这样你一次只能处理10个文件。您可能需要调整文件数量,具体取决于您拥有的文件数量以及它们的大小,即:如果您有300个文件,每个200MB,那么一次10个可能是好的,而如果您有30个文件,则为20MB每个你可能想要增加到50甚至100。
编辑:我只是看了,Compress-Archive
支持通过指定-Update
参数将文件添加到存档。您应该能够执行与上面相同的操作,稍加修改,以制作1个大型存档。
For($i=0;$i -le $ArchiveContents.Count;$i=$i+10){
Compress-Archive -Path $ArchiveContents[$i..($i+9)] -DestinationPath .\W3SVC2.zip -Update
}
这应该一次只添加10个文件到目标存档,而不是尝试一次添加所有文件。
答案 1 :(得分:0)
以下解决方案提供比压缩-存档
更好的增强性能Create Windows Optimized Compression
ECHO OFF
ECHO Starting Compressing $args[0] to $args[1]
$source = $args[0]
$destination = $args[1]
$compressionLevel = [System.IO.Compression.CompressionLevel]::Optimal
$includeBaseDirectory = $false
Add-Type -AssemblyName System.IO.Compression.FileSystem
[System.IO.Compression.ZipFile]::CreateFromDirectory("$sourcePath","$destinationPath",$compressionLevel,$includeBaseDirectory)
PAUSE
C:\> powershell .\OptimalCompress.ps1 c:\YourSourceFolder c:\YourDestinationFile.zip