1

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

4

0 回答 0