web-dev-qa-db-ja.com

Powershell-すべてのメモリを消費する圧縮アーカイブ

PowerShellとスクリプトを初めて使用します。

Compress-archiveコマンドレットを使用して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です。誰かがこれについて教えてもらえますか?

前もって感謝します。

2
joebegborg07

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を使用すると、ホストプロセスを強制終了する前に6GB RAMの使用量が見られましたが、上記を使用すると、RAM PowerShellホストプロセスによる使用。

2
Dusty Vargas