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です。誰かがこれについて教えてもらえますか?
前もって感謝します。
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ホストプロセスによる使用。