Powershell - Сжатие-архив, занимающий всю память

Я новичок в powershell и сценариях.

Я Я пытаюсь сжать файлы журнала IIS (всего 60 ГБ) с помощью командлета compress-archive, однако каждый раз я получаю сообщение об ошибке:

«Возникло исключение типа 'System.OutOfMemoryException'.»

Я уже настроил MaxMemoryPerShellMB до 2048 МБ и перезапустил службу WinRM.

RAM Потребление памяти превышает 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. Может ли кто-нибудь помочь мне в этом, пожалуйста?

Заранее спасибо.

2
задан 25 April 2017 в 19:24
1 ответ

Как заметил Даниэль, используйте класс .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.

2
ответ дан 3 December 2019 в 11:29

Теги

Похожие вопросы