我正在使用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)