Я новичок в PowerShell и скриптах.
Я пытаюсь сжать файлы журнала IIS (всего 60 ГБ) с помощью командлета compress-archive, но каждый раз получаю сообщение об ошибке:
«Возникло исключение типа System.OutOfMemoryException».
Я уже настроил MaxMemoryPerShellMB до 2048 МБ и перезапустил службу WinRM.
При выполнении команды потребление оперативной памяти превышает 6 ГБ.
Код, который я использую, следующий:
$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. Может ли кто-нибудь помочь мне в этом, пожалуйста?
Заранее спасибо.
Как заметил Даниэль, используйте класс .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 каталога и практически не использует ОЗУ. Я попытался заархивировать один и тот же каталог (размером 25 ГБ) обоими методами. С помощью Compress-Archive
Я видел более 6 ГБ ОЗУ, прежде чем мне пришлось убить хост-процесс, тогда как использование выше показало 0 увеличение использования ОЗУ хост-процессом PowerShell.