DotNetZipライブラリを使用して PowerShell で ZIP ファイルを抽出しており、進行状況を表示したいと考えています。私は次のコードを使用しています:
try {
$zip = [Ionic.Zip.ZipFile]::Read($ZipFileName)
Register-ObjectEvent `
-InputObject $zip `
-EventName ExtractProgress `
-SourceIdentifier ExtractProgress `
-Action {
[Console]::Beep()
Write-Host $Sender
Write-Host $SourceEventArgs
} | Out-Null
$zip.ExtractAll($Destination, 'OverwriteSilently')
}
finally {
Unregister-Event -SourceIdentifier ExtractProgress
$zip.Dispose()
}
Write-Host
私の問題は、最後までイベントが表示されないことです(ビープ音、いいえ)。プロセス中に進捗イベントが表示されることを期待しています。
最初は、イベントをキューに入れたためだと思っていましたRegister-ObjectEvent
が、PowerShell のヘルプには-Action
、イベントがキューに入れられることなく、すぐに呼び出されると書かれています。
C# コンソール アプリケーションで同等のコードを記述した場合、期待どおり、各ファイルが抽出されるときに進行状況イベントが表示されます。これは、(私が知る限り) DotNetZip が正しいことを行っていることを意味します。イベントは、 を呼び出したのと同じスレッドで発生することに注意してくださいExtractAll
。
私は何を間違っていますか?
(Windows 7 x64、PowerShell 2.0、.NET 4.0 を使用するように構成)